环境:
当我们尝试启动tomcat时,我们得到以下堆栈跟踪。它曾经工作,但现在它总是给出这个,并且无法启动:
org.apache.tomcat.jdbc.pool.ConnectionPool abandon
WARNING: Connection has been abandoned PooledConnection[com.mysql.jdbc.JDBC4Connection@4db0ee25]:java.lang.Exception
at org.apache.tomcat.jdbc.pool.ConnectionPool.getThreadDump(ConnectionPool.java:1063)
at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:780)
at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:619)
at org.apache.tomcat.jdbc.pool.ConnectionPool.getConnection(ConnectionPool.java:188)
at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:128)
at org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy$LazyConnectionInvocationHandler.getTargetConnection(LazyConnectionDataSourceProxy.java:403)
at org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy$LazyConnectionInvocationHandler.invoke(LazyConnectionDataSourceProxy.java:376)
context.xml包含:
<Resource name="myapp" auth="Container" type="javax.sql.DataSource"
maxActive="100" minIdle="10" maxIdle="20" maxWait="10000"
username="myapp" password="pass" driverClassName="com.mysql.jdbc.Driver"
validationquery="SELECT 1;"
testWhileIdle="true"
testOnBorrow="true"
testOnReturn="false"
validationInterval="30000"
timeBetweenEvictionRunsMillis="30000"
initialSize="10"
removeAbandonedTimeout="120"
removeAbandoned="true"
logAbandoned="true"
minEvictableIdleTimeMillis="60000"
jmxEnabled="true"
url="jdbc:mysql://10.0.2.20:3306/myapp"/>
和grails数据源有这个:
dataSource {
pooled = true
driverClassName = "com.mysql.jdbc.Driver"
dialect = "org.hibernate.dialect.MySQL5InnoDBDialect"
properties {
maxActive = -1
minEvictableIdleTimeMillis=1800000
timeBetweenEvictionRunsMillis=1800000
numTestsPerEvictionRun=3
testOnBorrow=true
testWhileIdle=true
testOnReturn=true
validationQuery="SELECT 1"
}
}
production {
dataSource {
pooled = false
jndiName = "java:comp/env/myapp"
}
}
尝试了什么:
有趣的是,我有另一台服务器完美运行,具有相同的版本和配置 - 唯一的区别是一个是使用dediserve托管的虚拟服务器,另一个是带有运行tomcat的lxc容器的物理服务器。 dediserve工作。
一个很大的线索可能是它在tomcat启动时自动运行liquibase(通过标准的grails数据库迁移插件1.4.0),并且它已正确创建了模式,但没有任何数据。
答案 0 :(得分:0)
好的,找到了解决方案。基本上,liquibase需要花费很长时间才能启动,而不是已经设置的已经非常高的removeAbandonedTimeout 120s。我将其更改为1000秒并开始。