【发布时间】:2015-10-05 08:32:06
【问题描述】:
我为我的网站更改了托管公司,其中我使用了一个 mySQL 数据库。 有时我会收到此错误:
连接关闭后不允许任何操作。
我记得我第一次在旧服务器上运行我的网站时遇到了同样的问题,我通过“配置修复”而不是“代码修复”解决了这个问题,但我不记得我的做了:(
我在这里阅读了 mant 帖子,但每个人都在谈论代码修复,我不认为这是我的情况
有人可以帮我吗?
谢谢
编辑
我在旧的 context.xml 文件中找到了这个;可能这就是我解决问题的方法
validationQuery="SELECT 1"
testOnBorrow="true"
testOnBorrow:(布尔值)指示对象在从池中借用之前是否会经过验证。如果对象验证失败,它将从池中删除,我们将尝试借用另一个。注意 - 要使真值生效,validationQuery 参数必须设置为非空字符串。默认值为假
validationQuery:(字符串)在将连接返回给调用者之前,将用于验证来自该池的连接的 SQL 查询。如果指定,此查询不必返回任何数据,它只是不能抛出 SQLException。默认值为空。示例值为 SELECT 1(mysql)、select 1 from dual(oracle)、SELECT 1(MS Sql Server)
有人可以确认吗?
【问题讨论】:
-
也许这有帮助:No Operations allowed.
-
可能与您的数据库配置的连接超时有关。
-
我通常在我的 JDBC 连接 URL 中使用 AutoReconnect=true 参数:(例如:“jdbc:mysql://localhost:3306/my-db?autoReconnect=true”)。
-
我可以确认,在我运行我的 SpringBoot 应用程序(连接到 MySQL)之前设置了以下环境变量后,我不再看到
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.错误:spring.datasource.testOnBorrow=true,spring.datasource.validationQuery="SELECT 1",spring.datasource.validationInterval=30000。详见 Tomcat 的 JDBC 池属性here。