Tomcat dbcp removeAbandoned问题

时间:2018-02-08 05:18:42

标签: spring tomcat jdbc tomcat-dbcp

有人可以解释一下如何正确使用removeAbandoned属性吗? 问题是,我们有一个在事务中运行的服务方法(应用@Transactional)。正文可以是1000个select语句,例如1000个插入。 removeAbandoned属性设置为60秒。现在,如果1000个插入语句的执行时间超过60秒,则抛出异常"连接已经关闭"用于下一个db语句。为什么会发生这种情况以及如何解决这个问题?如果我删除removeAbandoned属性,每个东西都运行良好。这是我的dbcp配置。

db.initialSize=5
db.maxActive=150
db.minIdle=0
db.maxIdle=8
db.defaultAutoCommit=false
db.defaultTransactionIsolation=-1
db.maxWaitMillis=3000
db.timeBetweenEvictionRunMillis=1000
db.minEvictableIdleTimeMillis=1000
db.testOnBorrow=true
db.testOnReturn=false
db.testWhileIdle=false
db.removeAbandoned=true
db.removeAbandonedTimeout=60
db.poolPreparedStatements=true
db.validationQuery=select 1

通过使用这些属性,我们正在构建数据源。如果我在这里做错任何事,请纠正我。我假设在哪里调用此服务,它会打开一个连接并执行db语句,但是它在removeAbandonedTimeout之后尝试使用相同的连接?

1 个答案:

答案 0 :(得分:0)

这是removeAbondoned的正常行为,请检查here。您需要检查您的要求和约束并进行相应配置。如果执行花费了那么多时间并且这是正确的实现,那么调整配置(增加放弃超时或完全删除它)。

例如,这可能适用于夜间作业和离线数据迁移过程。如果有用户交互,我认为您需要考虑响应性,从而改变服务的实现。然后,您可能需要将其分成不同的服务或调整SQL内部或删除一些不必要的调用,但保持超时配置。