Tomcat dbcp removeAbandoned 问题
Tomcat dbcp removeAbandoned issue
有人可以解释一下如何正确使用 removeAbandoned 属性 吗?
问题是,我们有在事务中运行的服务方法(应用@Transactional)。例如,正文可以是 1000 select 语句后跟 1000 条插入。 removeAbandoned 属性 设置为 60 秒。现在,如果 1000 条插入语句的执行时间超过 60 秒,则会为下一条 db 语句抛出异常 "Connection already closed"。为什么会发生这种情况以及如何克服这种情况?如果我删除 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
通过使用这些属性,我们正在构建数据源。如果我在这里做错了什么,请纠正我。我假设这个服务在哪里被调用,它打开一个连接并执行数据库语句但是它在 removeAbandonedTimeout?
之后试图使用相同的连接
这是 removeAbondoned
的正常行为,检查 here。您需要检查您的要求和约束并进行相应的配置。如果执行花费那么多时间并且这是正确的实现,则调整配置(增加放弃超时或完全删除它)。
例如,这对于夜间作业和离线数据迁移过程来说可能很常见。如果有用户交互,我认为你需要考虑响应性,从而改变服务的实现。然后你可能需要把它分离成不同的服务或调整里面的SQL或删除一些不必要的调用,但保持超时的配置。
有人可以解释一下如何正确使用 removeAbandoned 属性 吗? 问题是,我们有在事务中运行的服务方法(应用@Transactional)。例如,正文可以是 1000 select 语句后跟 1000 条插入。 removeAbandoned 属性 设置为 60 秒。现在,如果 1000 条插入语句的执行时间超过 60 秒,则会为下一条 db 语句抛出异常 "Connection already closed"。为什么会发生这种情况以及如何克服这种情况?如果我删除 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
通过使用这些属性,我们正在构建数据源。如果我在这里做错了什么,请纠正我。我假设这个服务在哪里被调用,它打开一个连接并执行数据库语句但是它在 removeAbandonedTimeout?
之后试图使用相同的连接这是 removeAbondoned
的正常行为,检查 here。您需要检查您的要求和约束并进行相应的配置。如果执行花费那么多时间并且这是正确的实现,则调整配置(增加放弃超时或完全删除它)。
例如,这对于夜间作业和离线数据迁移过程来说可能很常见。如果有用户交互,我认为你需要考虑响应性,从而改变服务的实现。然后你可能需要把它分离成不同的服务或调整里面的SQL或删除一些不必要的调用,但保持超时的配置。