在 Spring boot 中动态配置 DataSourceBuilder url

Posted

技术标签:

【中文标题】在 Spring boot 中动态配置 DataSourceBuilder url【英文标题】:Configure DataSourceBuilder url dynamically in Spring boot 【发布时间】:2019-04-18 16:47:47 【问题描述】:

我在application.properties 文件中定义了以下属性。

sample.db.serverName=10.10.10.10
sample.db.serverPort=1234
sample.db.databaseName=sampleDb

现在我使用 DataSourceBuilder,但我需要使用所有可用信息构建 url,因为它只有 url 参数。

我不确定如何将属性读入 POJO 并在 DataSource 类中获取句柄

public DataSource dataSource()

   //handle for POJO
   //StringBuilder to build the url
   return DataSourceBuilder.create.url(str.toString()).build();

P.S : 我提到了这个link,但它与我的问题不同。

【问题讨论】:

【参考方案1】:

使用@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() 方法,它开始看起来很复杂。

【讨论】:

【参考方案2】:

您可以创建配置属性类(简单的POJO):

@ConfigurationProperties(prefix = "sample.db")
public class DbProperties 
    private String serverName;
    private String serverPort;
    private String databaseName;

    // getters and setters

之后,您可以告诉 Spring 创建此类的实例并从属性文件中填充属性:

@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();
    

【讨论】:

以上是关于在 Spring boot 中动态配置 DataSourceBuilder url的主要内容,如果未能解决你的问题,请参考以下文章

在 Spring boot 中动态配置 DataSourceBuilder url

Spring boot 动态的配置Scheduling

Spring boot项目分环境Maven打包,动态配置文件,动态配置项目

spring boot 配置动态刷新

spring boot 配置动态刷新

Spring Boot 动态数据源(Spring 注解数据源)