spring 配置dbcp连接池不能释放,

#回收被遗弃的(一般是忘了释放的)数据库连接到连接池中。  
dataBase.removeAbandoned =false

# 数据库连接过多长时间不用将被视为被遗弃而收回连接池中。    
dataBase.removeAbandonedTimeout = 30

# 将被遗弃的数据库连接的回收记入日志。   
dataBase.logAbandoned = false

#连接池的最大数据库连接数,设为0 表示无限制。  
dataBase.maxActive = 200

#数据库连接的最大空闲连接数。超过此空闲连接数,,数据库连接将被标记为不可用,然后被释放。设为0 表示无限制。 
dataBase.maxIdle=40

#最大建立连接等待时间。如果超过此时间将接到异常。设为-1 表示无限制
dataBase.maxWait=10000

#取得、返回对象和空闲时是否进行验证,检查对象是否有效,默认都为false即不验证
dataBase.testOnBorrow=true
dataBase.testWhileIdle=true
dataBase.testOnReturn=true
dataBase.validationQuery=select 1 from dual

 

 

 

说明:

1. #回收被遗弃的(一般是忘了释放的)数据库连接到连接池中。  
dataBase.removeAbandoned =false

如果这个值为true一般是用来调试的时候用的,正式发布后应该改为false,2. # 将被遗弃的数据库连接的回收记入日志。   
dataBase.logAbandoned = false

这个如果设置为true就会引起如下错误:

  1. DBCP object created 2006-10-25 09:08:02 by the following code was never closed:   
  2. java.lang.Exception   
  3.     at org.apache.commons.dbcp.AbandonedTrace.setStackTrace(AbandonedTrace.java:157)   
  4.     at org.apache.commons.dbcp.AbandonedObjectPool.borrowObject(AbandonedObjectPool.java:76)   
  5.     at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:95)   
  6.     at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)   
  7.     at org.apache.commons.dbcp.BasicDataSource$$FastClassByCGLIB$$de03396c.invoke(<generated>)   
  8.     at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)  

 

 2.

#连接池的最大数据库连接数,设为0 表示无限制。  
dataBase.maxActive = 200

#数据库连接的最大空闲时间。超过此空闲时间,数据库连接将被标记为不可用,然后被释放。设为0 表示无限制。 
dataBase.maxIdle=40

 

会有可能出现:Cannot get a connection, pool error Timeout waiting for idle object这样的错误

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot 集成 DBCP 连接池需要进行以下步骤: 1. 添加 DBCP 的依赖 在 pom.xml 文件中添加以下依赖: ```xml <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-dbcp2</artifactId> <version>2.7.0</version> </dependency> ``` 2. 添加数据库配置 在 application.properties 或 application.yml 中添加数据库相关配置,如下所示: ```properties # 数据库驱动 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # 数据库连接地址 spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false # 数据库用户名 spring.datasource.username=root # 数据库密码 spring.datasource.password=123456 # 连接池参数 spring.datasource.initialSize=5 spring.datasource.minIdle=5 spring.datasource.maxIdle=20 spring.datasource.maxTotal=50 spring.datasource.maxWaitMillis=60000 spring.datasource.validationQuery=select 1 from dual spring.datasource.testWhileIdle=true spring.datasource.timeBetweenEvictionRunsMillis=60000 spring.datasource.numTestsPerEvictionRun=5 spring.datasource.testOnBorrow=true spring.datasource.testOnReturn=false ``` 3. 配置 DBCP 连接池Spring Boot 应用启动类上添加 `@Configuration` 注解,并配置 DBCP 连接池,如下所示: ```java @Configuration public class DbcpConfig { @Value("${spring.datasource.driver-class-name}") private String driverClassName; @Value("${spring.datasource.url}") private String url; @Value("${spring.datasource.username}") private String username; @Value("${spring.datasource.password}") private String password; @Value("${spring.datasource.initialSize}") private int initialSize; @Value("${spring.datasource.minIdle}") private int minIdle; @Value("${spring.datasource.maxIdle}") private int maxIdle; @Value("${spring.datasource.maxTotal}") private int maxTotal; @Value("${spring.datasource.maxWaitMillis}") private long maxWaitMillis; @Value("${spring.datasource.validationQuery}") private String validationQuery; @Value("${spring.datasource.testWhileIdle}") private boolean testWhileIdle; @Value("${spring.datasource.timeBetweenEvictionRunsMillis}") private long timeBetweenEvictionRunsMillis; @Value("${spring.datasource.numTestsPerEvictionRun}") private int numTestsPerEvictionRun; @Value("${spring.datasource.testOnBorrow}") private boolean testOnBorrow; @Value("${spring.datasource.testOnReturn}") private boolean testOnReturn; @Bean public DataSource dataSource() { BasicDataSource dataSource = new BasicDataSource(); dataSource.setDriverClassName(driverClassName); dataSource.setUrl(url); dataSource.setUsername(username); dataSource.setPassword(password); dataSource.setInitialSize(initialSize); dataSource.setMinIdle(minIdle); dataSource.setMaxIdle(maxIdle); dataSource.setMaxTotal(maxTotal); dataSource.setMaxWaitMillis(maxWaitMillis); dataSource.setValidationQuery(validationQuery); dataSource.setTestWhileIdle(testWhileIdle); dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis); dataSource.setNumTestsPerEvictionRun(numTestsPerEvictionRun); dataSource.setTestOnBorrow(testOnBorrow); dataSource.setTestOnReturn(testOnReturn); return dataSource; } } ``` 4. 使用 DataSource 在需要使用数据库连接的地方,可以通过 `@Autowired` 注入 DataSource,然后获取 Connection,如下所示: ```java @Autowired private DataSource dataSource; public void executeSql(String sql) throws SQLException { try (Connection conn = dataSource.getConnection(); Statement stmt = conn.createStatement()) { stmt.execute(sql); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值