gpt4 book ai didi

java - SpEL @ConditionalOnProperty 字符串属性为空或 null

转载 作者:行者123 更新时间:2023-12-02 00:54:12 25 4
gpt4 key购买 nike

目前,我在基于 applications.yaml 文件中的 String 属性创建 dataSource bean 时遇到问题。

理想情况下,我只想在 application.yaml 文件中设置了 url 时才创建 dataSource bean。如果 bean 不存在(空或 null),则不应创建该 bean。我知道这个条件检查 boolean 值,但是有没有办法检查字符串属性是否为空或 null?

DatabaseConfig.java

@Configuration
public class DatabaseConfig {
@Value("${database.url:}")
private String databaseUrl;

@Value("${database.username:}")
private String databaseUsername;

@Value("${database.password:}")
private String databasePassword;

protected static final String DRIVER_CLASS_NAME = "com.sybase.jdbc4.jdbc.SybDriver";


/**
* Configures and returns a datasource. Optional
*
* @return A datasource.
*/
@ConditionalOnProperty(value = "database.url")
@Bean
public DataSource dataSource() {
return DataSourceBuilder.create()
.url(testDatabaseUrl)
.username(testDatabaseUsername)
.password(testDatabasePassword)
.build();
}
}

application.yml(此字段是可选的)

database:
url: http://localhost:9000

最佳答案

您可以将@ConditionalOnExpressionSpring Expression Language (SpEL)一起使用表达式作为值:

@ConditionalOnExpression("!T(org.springframework.util.StringUtils).isEmpty('${database.url:}')")
@Bean
public DataSource dataSource() {
// snip
}

为了更好的可读性和可重用性,您可以将其转换为注释:

@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@ConditionalOnExpression("!T(org.springframework.util.StringUtils).isEmpty('${database.url:}')")
public @interface ConditionalOnDatabaseUrl {
}

@ConditionalOnDatabaseUrl
@Bean
public DataSource dataSource() {
// snip
}

关于java - SpEL @ConditionalOnProperty 字符串属性为空或 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46118782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com