Grails 3.3.3战争部署在具有关闭jdbc连接的tomcat 8.5问题上

时间:2018-07-13 10:48:24

标签: sqlexception grails3 tomcat8.5 tomcat-jdbc

当我在容器中运行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容器中拥有一个普通池。在旧的容器版本中,事情也可以正常工作

1 个答案:

答案 0 :(得分:0)

找到了。这是由于3个问题:

    必须提供
  1. tomcat-jdbc的等级依赖类型,并且不进行编译以避免冲突(tomcat安装的lib部分)

  2. 在“ dataSource:”下面的application.yml(以及本地文件重载application.yml的内容)属性中,池化没有被其他数据源继承(在锚点“ dataSources:”下定义)

    < / li>
  3. 如果在removeAbandonedTimeout内未完成操作:60 (秒),连接将被扯开,从而触发 连接失败异常。增加了价值。不幸的是 因为removeAdbandoned设置为true,所以它是不可见的,但事实并非如此 logAbandoned。