0

当我在容器中运行war文件时,它显示为服务器端的连接断开(默认空闲超时为8h)导致异常(根本原因:连接已经关闭/最后一个成功的包发送到服务器要么0ms ago 或表示 >8h 的值。这些异常在重新启动容器之前无法恢复。

问题 1)当在 build.grade 运行时“org.apache.tomcat:tomcat-jdbc”中添加 jdbc-tomcat 池作为依赖项时,不会尝试重新连接到断开连接的“除主”数据源(低于数据源)。不管这些属性如何: dataSource: pooled: true jmxExport: true driverClassName: com.mysql.jdbc.Driver
dialect: org.hibernate.dialect.MySQL5InnoDBDialect properties: initialSize: 2 # 连接池大小 maxActive: 10 minIdle: 0 maxIdle: 10 removeAbandonedTimeout: 120 # 石英作业使用的空闲连接 removeAbandoned: true validationQuery: SELECT 1 testOnBorrow: true maxWait: 10000 maxAge: 600000 timeBetweenEvictionRunsMillis: 5000 minEvictableIdleTimeMillis: 60000 validationQueryTimeout: 3 validationInterval: 15000 testWhileIdle: true testOnReturn: false jdbcInterceptors: ConnectionState defaultTransactionIsolation: java.sql.Connection.TRANSACTION_READ_COMMITTED "other" DS 在 grails/tomcat 组合中完全支持池化.

因此,我从 gradle 中删除了 tomcat-jdbc,并在每个 url 之后放置 ?autoReconnect=true。不过,某些属性会产生影响。properties: initialSize: 2 # 连接池大小 maxActive: 20 minIdle: 2 maxIdle: 20 以上值导致,在使用 20 次连接(顺序,非并行)的闭包内 20 次调用后,第 21 次失败。在整个过程中,观察 mariadb 端的打开连接有零个或一个并发 conns。删除它工作的属性后。为什么未加载 conn 池时此值会影响?

Tomcat 带有自己的 tomcat-jdbc jar,这可能会有所作为。是否需要在 build.grade 中将类型更改为“提供”,就像 tomcat 本身一样?

问题 2) 是网络调查结果,即也在这个论坛中,而且 grails 文档本身也指向https://grails.org/deployment。doc 在部署到那里记录的容器时提到了警告......但是当我注册时,我没有收到确认电子邮件并且页面转发到https://grails.org/unauthorized。在我看来,注册好像被破坏了。是否有电子邮件联系方式 - 找不到。

我简直不敢相信这需要我这么长时间才能在 Web 容器中拥有一个普通的池。在旧容器版本中也可以正常工作

4

1 回答 1

0

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

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

  2. 在 application.yml (和 application.yml 的本地文件重载内容)中,“dataSource:”下方的用于池的属性未被其他数据源继承(在锚点“dataSources:”下方定义)

  3. 如果在 removeAbandonedTimeout: 60(秒)内未完成操作,则连接将被撕回,从而触发连接失败异常。增加了价值。不幸的是它是不可见的,因为 removeAdbandoned 设置为 true,但不是 logAbandoned。

于 2018-07-16T12:46:32.927 回答