我们使用tomcat资源连接到我们的MySQL 5.7数据库,连接字符串在下面给出,
<Resource name="jdbc/bm"
type="javax.sql.DataSource"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
initialSize="34"
maxActive="500"
maxIdle="5"
username="root"
testWhileIdle="true"
removeAbandonedTimeout="60"
maxWait="-1"
removeAbandoned="true"
logAbandoned="true"
validationQuery="select 1"
validationInterval="60000"
driverClassName="com.mysql.jdbc.Driver"
password="XXXXXX"
minEvictableIdleTimeMillis="30000"
timeBetweenEvictionRunsMillis="120000"
testOnBorrow="true"
url="TESTURL"/>
虽然这很好用,但我们开始面临操作系统级别无端口问题。因此我们切换到tomcat连接池,
<Resource name="jdbc/bm"
type="javax.sql.DataSource"
**factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"**
initialSize="34"
maxActive="500"
maxIdle="5"
username="root"
testWhileIdle="true"
removeAbandonedTimeout="60"
maxWait="-1"
removeAbandoned="true"
logAbandoned="true"
validationQuery="select 1"
validationInterval="60000"
driverClassName="com.mysql.jdbc.Driver"
minEvictableIdleTimeMillis="30000"
timeBetweenEvictionRunsMillis="120000"
testOnBorrow="true"
url="URL/>
由于我们介绍了这一点,我们经常在日志中收到以下错误,
2017-Aug-02 01:23:48,426 ERROR IRWorkflowService:3446 - ^M
org.springframework.dao.CannotAcquireLockException: Hibernate
operation: Could not execute JDBC batch update; SQL
我们正在使用基于SPRING-HIBERNATE的连接设置。我们检查了所有可能死锁的场景代码,但没有得到任何线索。
修改
我确实读过这个possible duplicate,但它们似乎并不相似。即使在未显示锁定在show engine InnoDB状态的表上,我也会收到此错误。例如,show engine InnoDB状态中显示的锁在Y表上显示一个在X时间锁定的表,但该异常比X时间更新并且在另一个表上。