首页 > 解决方案 > springboot spring数据源tomcat属性不起作用

问题描述

我正在使用带有 spring starter 版本的 spring jpa 开发 springboot 应用程序<version>2.2.4.RELEASE</version>

我已经为 tomcat 定义了以下属性,并且还排除了 HikariCP注意:HikariCP 也不起作用

application.properties

spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
spring.datasource.tomcat.initial-size=30
spring.datasource.tomcat.max-wait=60000
spring.datasource.tomcat.max-active=300
spring.datasource.tomcat.min-idle=30
spring.datasource.tomcat.default-auto-commit=true 

我已经尝试了所有组合并且也使用了默认值,但是在 2-3 API 调用后我得到了以下错误。

o.h.engine.jdbc.spi.SqlExceptionHelper   : [http-nio-8080-exec-5] Timeout: Pool empty. Unable to fetch a connection in 30 seconds, none available[size:4; busy:
4; idle:0; lastwait:30000].

标签: spring-boottomcatspring-data-jpaspring-jdbc

解决方案


问题在于部署。我正在将应用程序部署到 cloudfoundry,默认情况下它会添加名为cloud. 因此,我为“云”配置文件创建了一个 DataSource bean,如下所示:

@Configuration
@Profile("cloud")
public class CloudConfig extends AbstractCloudConfig {

    @Bean
    public DataSource dataSource() {
        PooledServiceConnectorConfig.PoolConfig poolConfig = new PooledServiceConnectorConfig.PoolConfig(20, 300, 30000);
        DataSourceConfig dbConfig = new DataSourceConfig(poolConfig, null);
        return connectionFactory().dataSource(dbConfig);
    }
}

推荐阅读