有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在mysql上关闭连接后不允许操作

我为我的webiste更换了主机公司,我在其中使用了mySQL数据库。 我时常会遇到这样的错误:

No operations allowed after connection closed.

我记得我第一次在旧服务器上运行我的站点时遇到了同样的问题,我用“配置修复”而不是“代码修复”修复了这个问题,但我不记得我做了什么:(

我在这里读了很多帖子,但每一篇都在谈论代码修复,我不认为这是我的情况

有人能帮我吗

谢谢!

编辑

我是在我以前的背景下发现的。xml文件;也许这就是我解决问题的方法

  validationQuery="SELECT 1"
  testOnBorrow="true"

testOnBorrow:(布尔值)指示对象在从池中借用之前是否将被验证。如果对象无法验证,它将从池中删除,我们将尝试借用另一个对象。注意-要使真值生效,validationQuery参数必须设置为非空字符串。默认值为false

validationQuery:(字符串)将用于验证来自此池的连接的SQL查询,然后将其返回给调用方。如果指定,这个查询不必返回任何数据,它只是不能抛出SQLException。默认值为空。示例值包括SELECT 1(mysql)、SELECT 1 from dual(oracle)、SELECT 1(MS Sql Server)

有人能证实吗


共 (2) 个答案

  1. # 1 楼答案

    您可以在JDBC连接URL中使用autoReconnect=true参数:(例如:“JDBC:mysql://localhost:3306/my-db?autoReconnect=true”)

    但是请注意,如果应用程序不能正确处理SQLExceptions,这可能会导致问题

    来自MySql文档:

    autoReconnect

    Should the driver try to re-establish stale and/or dead connections? If > enabled the driver will throw an exception for a queries issued on a stale or dead connection, which belong to the current transaction, but will attempt reconnect before the next query issued on the connection in a new transaction. The use of this feature is not recommended, because it has side effects related to session state and data consistency when applications don't handle SQLExceptions properly, and is only designed to be used when you are unable to configure your application to handle SQLExceptions resulting from dead and stale connections properly. Alternatively, as a last option, investigate setting the MySQL server variable "wait_timeout" to a high value, rather than the default of 8 hours.

  2. # 2 楼答案

    在配置属性中,您可能使用了c3p0属性maxIdleTime,但c3p0属性是使用c3p0配置的。或者休眠。c3p0。。请注意,启用任何c3p0属性都会通过hibernate启发式自动启用相应的连接提供程序。在日志中看不到您正在使用c3p0。如果未配置数据源,则Hibernate将使用Hibernate。联系提供者_类组织。冬眠联系DriverManager连接提供程序。此连接提供程序具有内置的基本连接池,您可以为其设置休眠。联系池大小,但仅用于开发目的。不要在生产环境中使用它

    关于如何修复java,您可能会有无休止的讨论。网袜子例外:管子断了。过了一段时间,你会意识到你在池中保持了开放的连接,但由于以下原因,另一侧的连接突然关闭:

    • 防火墙或路由器可能会限制空闲连接(MySQL) 客户端/服务器协议不支持ping)
    • MySQL服务器可能是 关闭超过等待超时的空闲连接或 交互式超时阈值

      为了帮助解决这些问题,可以使用以下提示:

    • 使用了JDBC驱动程序的最新版本(5.1.13+)

    • 确保 等待超时和交互超时设置得足够高。检查 如果使用interactiveClient确保tcpKeepalive已启用
    • 确保所有可配置的防火墙或路由器超时设置 允许最大预期连接空闲时间
    • 确保 从连接池使用时,连接有效。使用查询 首先是/*ping*/执行轻量级ping,而不是 完整查询。请注意,ping的语法必须与 在这里指定
    • 在使用连接之前显式验证连接 如果连接长时间处于空闲状态
    • 尽可能减少连接对象在其他对象处于空闲状态时的持续时间 执行应用程序逻辑

    为了遵守其中一些选项,您最好使用一个可以与Hibernate一起使用的连接池。Hibernate支持commons dbcp、c3p0和proxool。您还可以在web服务器上配置JNDI数据源以与hibernate一起使用,它有一个连接池