在Spring Boot中动态配置DataSourceBuilder URL

时间:2018-11-15 14:41:34

标签: java spring spring-boot datasource

我在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,但这与我的问题不同。

2 个答案:

答案 0 :(得分:1)

您可以创建配置属性类(简单的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();
    }
}

答案 1 :(得分:0)

使用@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()方法,则注释看起来会很复杂。