当我在容器中运行war文件时,它显示为服务器端断开的连接(默认的空闲超时为8h)导致异常(根本原因:连接已关闭/与服务器的最后成功打包是在0ms之前发送或代表> 8h的值发送。这些异常只有在重新启动容器后才能恢复。
问题1)在build.grade中添加jdbc-tomcat池作为依赖项时
运行时“ org.apache.tomcat:tomcat-jdbc”
不会尝试重新连接到断开连接的“非主要”数据源(在数据源下方)。不管那些属性:
数据源:
合并:true
jmxExport:是
driverClassName:com.mysql.jdbc.Driver
的方言:org.hibernate.dialect.MySQL5InnoDBDialect
特性:
initialSize:2#连接池大小
maxActive:10
minIdle:0
上限:10
removeAbandonedTimeout:石英作业使用的120#免费连接
removeAbandoned:true
validationQuery:SELECT 1
testOnBorrow:正确
maxWait:10000
最高年龄:600000
timeBetweenEvictionRunsMillis:5000
minEvictableIdleTimeMillis:60000
validationQueryTimeout:3
validateInterval:15000
testWhileIdle:true
testOnReturn:否
jdbcInterceptors:ConnectionState
defaultTransactionIsolation:java.sql.Connection.TRANSACTION_READ_COMMITTED
在grails / tomcat组合中,完全支持“其他” DS。
因此,我从gradle中删除了tomcat-jdbc,并将其放在每个URL之后?autoReconnect = true。 但是,某些属性会影响。 特性: initialSize:2#连接池大小 maxActive:20 minIdle:2 最高:20 上面的值导致在闭包内使用20次连接(顺序,不是并行)进行20次调用后,第21个失败。在整个时间里,看着mariadb一侧的开放连接,有零个或一个并发conns。 删除属性后,它可以工作了。为什么未加载conn池时此值会产生影响?
Tomcat带有自己的tomcat-jdbc jar,这可能有所作为。 是否需要将build.grade中的类型更改为“提供”,就像tomcat本身一样?
问题2)是网络调查的结果,即也在该论坛中,但文档本身也指向https://grails.org/deployment。 doc提到了部署到此处记录的容器时的注意事项...但是当我注册时,我没有收到确认电子邮件,并且页面转发到https://grails.org/unauthorized。在我看来,注册似乎已失效。是否有与此相关的电子邮件联系人-找不到任何联系人。
我简直不敢相信这花了我这么长时间才能在Web容器中拥有一个普通池。在旧的容器版本中,事情也可以正常工作
答案 0 :(得分:0)
找到了。这是由于3个问题:
tomcat-jdbc的等级依赖类型,并且不进行编译以避免冲突(tomcat安装的lib部分)
在“ dataSource:”下面的application.yml(以及本地文件重载application.yml的内容)属性中,池化没有被其他数据源继承(在锚点“ dataSources:”下定义)
< / li>如果在removeAbandonedTimeout内未完成操作:60 (秒),连接将被扯开,从而触发 连接失败异常。增加了价值。不幸的是 因为removeAdbandoned设置为true,所以它是不可见的,但事实并非如此 logAbandoned。