当前位置: 首页 > 面试题库 >

一段时间后失去与MySQL的连接,并且不重新连接

史骏祥
2023-03-14
问题内容

我正在开发使用JPA + Hibernate访问MySQL数据库的独立服务器。

当我启动服务器时,一切正常。但是,经过一段时间(通常是第二天早上,如果我在下午开始),它将停止工作,因为与MySQL的连接显然已关闭(我SocketException在日志中看到很多s)。这可能是由于闲置造成的,服务器正在开发中,晚上没有人使用它。

我以为Hibernate,JDBC或我应用程序下面的其他某些层将管理连接,并在必要时重新打开它,但显然不是。有没有我错过的配置参数?

persistence.xml

http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd“ version =” 2.0“>

<persistence-unit name="manager">

<class>example.data.entities.User</class>
<class>example.data.entities.Player</class>

<properties>
    <property name="hibernate.dialect" value="example.data.HibernateDialect" />
    <property name="hibernate.max_fetch_depth" value="3" />
    <property name="hibernate.hbm2ddl.auto" value="update" />

    <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />

</properties>

</persistence-unit>

EntityManagerFactory 创建

    log.info("Connecting to database @ " + dbUrl + " using " + dbUser + "/" + dbPass);

    emf = Persistence.createEntityManagerFactory("manager", Maps.create(
            "javax.persistence.jdbc.user", dbUser,
            "javax.persistence.jdbc.password", dbPass,
            "javax.persistence.jdbc.url", dbUrl
    ));

一个问题

            try
            {

                TypedQuery<User> q = em.createQuery("SELECT u FROM User u WHERE u.email = :mail", User.class);
                q.setParameter("mail", email);
                try {
                    u = q.getSingleResult();
                    log.info("Authenticating: " + u);
                } catch (NoResultException e) {
                    return false;
                }

            } finally {
                em.close();
            }

问题答案:

正如您所建议的,这是因为mysql在每次wait_timeout传递之后都会关闭空闲连接;这是因为 您有一些解决方案来解决您的问题:

  • 使用连接池管理器,例如c3p0或apache DBCP。这将负责根据请求重新验证连接,最终您可以指定运行哪个查询以测试连接是否有效。
  • wait_timeout在mysql中设置足够大以适合您的使用情况(默认为8小时)。
  • 设置一个计划的任务(例如,使用quartz)刷新连接,“ ping” mysql服务器。


 类似资料:
  • 我遇到了一个关于从Spring Boot应用程序连接到MySQL的问题。部署后几个小时它都可以正常工作。但是当我停止我这边的任何活动(通常是在晚上)时,服务器会崩溃,例外情况如下: 我的申请。属性文件非常简单: 我想它可以连接到MySQL连接超时(如果我没弄错的话,默认值是8h)。我说得对吗?你能为我提供一些解决这种情况的方法吗?提前谢谢!

  • 我编写了一些逻辑,同时表示与exchange的近200个websocet连接。我使用第三方api,它基于org.eclipse.jetty.webSocket.api。我有一个我必须重写的方法。 我在stackoverflow上找到了这个问题,但我看不到清晰的答案。请帮忙,提前谢谢。

  • 重启MySQL后丢失Wildfly连接 我们使用2个版本MySQL版本14.14发行版5.6.51,Linux(x86_64)使用EditLine包装和MySQL版本8.0.28Linuxx86_64(MySQL社区服务器-GPL) 我们尝试了两个版本的Wildfly Wildfly-10.1.0。最终版本和wildfly-19.1.0。最终的 我们使用了JDBC数据库连接器版本is-8.0.19

  • 问题内容: 这个问题已经在这里有了答案 : 7年前关闭。 可能重复: 查询期间失去与MySQL服务器的连接 我正在将一些数据从大型csv导入mysql表。在将文件导入到表的过程中,我丢失了与服务器的连接。 怎么了? 错误代码为2013:在查询过程中失去与mySql服务器的连接。 我正在从Windows服务器上的ubuntu机器远程运行这些查询。 问题答案: 我发现此问题的最简单解决方案是将MySq

  • 问题内容: 我的Spring Boot应用程序总是在早上向我显示此whitelabel错误:无法打开JPA EntityManager进行事务;嵌套异常是javax.persistence.PersistenceException:org.hibernate.TransactionException:JDBC开始事务失败: 我在网上搜索,我认为可能是mysql关闭了8个小时的非活动连接。但是,根据