在 Spring 启动时动态配置 DataSourceBuilder url
Configure DataSourceBuilder url dynamically in Spring boot
我在 application.properties
文件中定义了以下属性。
sample.db.serverName=10.10.10.10
sample.db.serverPort=1234
sample.db.databaseName=sampleDb
现在我使用 DataSourceBuilder,但我需要使用所有可用信息构建 url,因为它只有 url 参数。
我不确定如何将属性读入 POJO 并在数据源中获取句柄class
public DataSource dataSource()
{
//handle for POJO
//StringBuilder to build the url
return DataSourceBuilder.create.url(str.toString()).build();
}
P.S : 我提到了这个 ,但它与我的问题不同。
您可以创建配置属性class(简单的 POJO):
@ConfigurationProperties(prefix = "sample.db")
public class DbProperties {
private String serverName;
private String serverPort;
private String databaseName;
// getters and setters
}
之后您可以告诉 Spring 创建此 class 的实例并从属性文件中填充属性:
@EnableConfigurationProperties(value = DbProperties.class)
最后,您可以将它们自动连接到创建数据源的方法中:
@Configuration
@EnableConfigurationProperties(value = DbProperties.class)
public class DatasourceConfig {
@Bean
public DataSource dataSource(final DbProperties properties) {
// do whatever you need
return DataSourceBuilder.create.url(str.toString()).build();
}
}
使用 @Bean
注释您的方法,并使用 @Value
注释将属性传递给它:
@Value("${sample.db.serverName}") private String serverName;
// .. repeat for other properties ...
@Bean public DataSource dataSource() {
String url = // build URL from serverName field and other fields
// create DataSource instance and return it
}
您还可以将 @Value
注释与方法参数一起使用,而不仅仅是字段 - 但是如果您从代码中调用 dataSource()
方法,它就会开始看起来很复杂。
我在 application.properties
文件中定义了以下属性。
sample.db.serverName=10.10.10.10
sample.db.serverPort=1234
sample.db.databaseName=sampleDb
现在我使用 DataSourceBuilder,但我需要使用所有可用信息构建 url,因为它只有 url 参数。
我不确定如何将属性读入 POJO 并在数据源中获取句柄class
public DataSource dataSource()
{
//handle for POJO
//StringBuilder to build the url
return DataSourceBuilder.create.url(str.toString()).build();
}
P.S : 我提到了这个
您可以创建配置属性class(简单的 POJO):
@ConfigurationProperties(prefix = "sample.db")
public class DbProperties {
private String serverName;
private String serverPort;
private String databaseName;
// getters and setters
}
之后您可以告诉 Spring 创建此 class 的实例并从属性文件中填充属性:
@EnableConfigurationProperties(value = DbProperties.class)
最后,您可以将它们自动连接到创建数据源的方法中:
@Configuration
@EnableConfigurationProperties(value = DbProperties.class)
public class DatasourceConfig {
@Bean
public DataSource dataSource(final DbProperties properties) {
// do whatever you need
return DataSourceBuilder.create.url(str.toString()).build();
}
}
使用 @Bean
注释您的方法,并使用 @Value
注释将属性传递给它:
@Value("${sample.db.serverName}") private String serverName;
// .. repeat for other properties ...
@Bean public DataSource dataSource() {
String url = // build URL from serverName field and other fields
// create DataSource instance and return it
}
您还可以将 @Value
注释与方法参数一起使用,而不仅仅是字段 - 但是如果您从代码中调用 dataSource()
方法,它就会开始看起来很复杂。