【问题标题】:Configure DataSourceBuilder url dynamically in Spring boot在 Spring boot 中动态配置 DataSourceBuilder url
【发布时间】: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,但它与我的问题不同。

【问题讨论】:

    标签: java spring spring-boot datasource


    【解决方案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();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2018-10-05
        • 1970-01-01
        • 2016-12-22
        • 2019-08-08
        • 1970-01-01
        • 2020-12-22
        • 2022-09-26
        • 2015-06-08
        • 2017-01-19
        相关资源
        最近更新 更多