如果我们在Spring Boot中以编程方式配置数据源,spring boot数据源属性是否有效

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果我们在Spring Boot中以编程方式配置数据源,spring boot数据源属性是否有效相关的知识,希望对你有一定的参考价值。

如果我们以编程方式配置数据源,Spring Boot数据源属性是否可行?

仅当我从application.properties获取数据库配置时,以下属性才有效。如果我以编程方式配置数据源,则以下属性不起作用。

spring.datasource.tomcat.initial-size=10
spring.datasource.tomcat.max-active=10
spring.datasource.tomcat.max-idle=5
spring.datasource.tomcat.min-idle=5

我使用以下代码以编程方式配置数据源

@ConfigurationProperties(prefix = "spring.datasource")
@Bean
@Primary
public DataSource dataSource() {
    return DataSourceBuilder.create().username(userName).password(password).url(url).driverClassName(driverName)
            .build();
}

为了使它以编程方式工作,我使用了以下代码片段。但我不相信。我觉得这不是一个更清洁的解决方案。我必须从application.properties中读取至少20个属性并将其添加到PoolProperties。

    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    @Primary
    public DataSource dataSource() {
        PoolProperties poolProperties = new PoolProperties();
        poolProperties.setUrl(url);
        poolProperties.setDriverClassName(driverName);
        poolProperties.setUsername(userName);
        poolProperties.setPassword(password);
        poolProperties.setTestWhileIdle(false);
        poolProperties.setTestOnBorrow(true);
        poolProperties.setValidationQuery("SELECT 1 FROM DUAL");
        poolProperties.setTestOnReturn(false);
        poolProperties.setValidationInterval(30000);
        poolProperties.setTimeBetweenEvictionRunsMillis(30000);
        poolProperties.setInitialSize(10);
        poolProperties.setMaxActive(10);
        poolProperties.setMaxIdle(5);
        poolProperties.setMinIdle(5);
        poolProperties.setMaxWait(10000);
        poolProperties.setRemoveAbandonedTimeout(60);
        poolProperties.setMinEvictableIdleTimeMillis(30000);
        poolProperties.setLogAbandoned(true);
        poolProperties.setRemoveAbandoned(true);
        DataSource datasource = new DataSource(); // import org.apache.tomcat.jdbc.pool.DataSource;
        datasource.setPoolProperties(poolProperties);
        return datasource;
    }

有没有办法我们可以使以下默认的Spring Boot属性工作?

spring.datasource.tomcat.initial-size=10
spring.datasource.tomcat.max-active=10
spring.datasource.tomcat.max-idle=5
spring.datasource.tomcat.min-idle=5
答案

记得在这样的属性文件中从db的属性中给出tomcat。

# Oracle DB - "foo"
spring.datasource.tomcat.url=jdbc:oracle:thin:@//db-server-foo:1521/FOO
spring.datasource.tomcat.username=fooadmin
spring.datasource.tomcat.password=foo123
spring.datasource.tomcat.initial-size=10
spring.datasource.tomcat.max-active=10
spring.datasource.tomcat.max-idle=5
spring.datasource.tomcat.min-idle=5

然后像这样配置数据源。

 /**
 * Auto-configured DataSource
 */
@ConfigurationProperties(prefix = "spring.datasource.tomcat")
@Bean
@Primary
public DataSource dataSource() {
    return DataSourceBuilder.create().build();
}

以上是关于如果我们在Spring Boot中以编程方式配置数据源,spring boot数据源属性是否有效的主要内容,如果未能解决你的问题,请参考以下文章

在 Spring Boot 应用程序中以编程方式重新启动 HikariPool?

如何在 Spring 中以编程方式获取当前的活动/默认环境配置文件?

如何在 Spring 中以编程方式获取当前的活动/默认环境配置文件?

Spring Boot 程序化日志配置

spring boot01,spring完全注解(零配置)编程方式

使用 spring-boot 以编程方式添加另一个属性资源配置器