当前位置: 首页 > 知识库问答 >
问题:

如何调试/解决MySQL JDBC连接超时

司徒钱青
2023-03-14

我正在迁移一个带有MySQL数据库的Java应用程序。现在连接会在某个时候超时,尽管使用相同参数的同一个连接在以前的几个事务中工作得很好。代码如下:

公共类DBConnection{

public DBConnection() {
    super();
}

public static Connection getConnection(String database, String port,
        String schema, String username, String password)
        throws SQLException, ClassNotFoundException {
    Class.forName("com.mysql.jdbc.Driver");
            System.out.println("Connecting to DB:");

    Connection connection = DriverManager.getConnection("jdbc:mysql://"
            + database + ":" + port + "/" + schema, username, password);
            System.out.println("Connection success: " + connection.isValid(3));

    return connection;
}

}

和我的日志:

null

2016-06-21 15:53:31,436警告[com.arjuna.ats.arjuna](Transaction Reaper Worker 0)arjuna012108:CheckedAction::Check-原子操作0:FFFF0A00016D:-382678FC:5769432F:39在1个线程活动的情况下中止!2016-06-21 15:53:31,436警告[org.jboss.as.txn](Transaction Reaper Worker 0)WFlyTX0027:与tx TransactionImple 关联的JCA前同步org.jboss.as.ejb3.tx.OwnableReentrantLock.Unlock(Ownable)$StateFulSessionSynchronizationInterceptors.as.txn.service.internal.tsr.jcaOrderedLastSynchronizationList.AfterCompletion(jcaOrderedLastSynchronizationList.java:147)位于com.arjuna.ats.internal.jta.resources.arjunaCore.SynchronizationImple.AfterCompletion(synchronizationImple.96)位于com.arjuna.ats.arjuna.Coordinator.TwophaseCoordinator.AfterCompletion(synchronizationImple.545)位于

2016-06-21 15:53:31,436警告[com.arjuna.ats.arjuna](Transaction Reaper Worker 0)arjuna012121:TransactionReaper::Docancellations Worker线程[Transaction Reaper Worker 0,5,Main]成功取消TX 0:FFFF0A00016D:-382678FC:5769432F:39

JDBC版本与DB-MySQL版本相匹配,我不知道该去哪里看,也不知道该考虑哪些错误源。哦,超时设置为5分钟,所以不是这样。

非常感谢您的帮助!

附注。应用程序和数据库都运行在同一安全的windows服务器上,我通过localhost:3306访问,外部访问被阻止

共有2个答案

步博艺
2023-03-14

我解决了问题。我认为是java.sql.DriverManager中的这段代码,但我无法验证这一点。我的猜测是synchronized阻塞了一些东西,因为连接泄漏不是问题(原始代码中返回的连接被用在try块中,自Java 7或8以来try块自动关闭所有实现Autocloseable接口的东西)

private static Connection getConnection(
        String url, java.util.Properties info, Class<?> caller) throws SQLException {
        /*
         * When callerCl is null, we should check the application's
         * (which is invoking this class indirectly)
         * classloader, so that the JDBC driver class outside rt.jar
         * can be loaded from here.
         */
        ClassLoader callerCL = caller != null ? caller.getClassLoader() : null;
        synchronized(DriverManager.class) {
            // synchronize loading of the correct classloader.
            if (callerCL == null) {
                callerCL = Thread.currentThread().getContextClassLoader();
            }
        }

我所做的是使用连接池:

http://www.javatips.net/blog/dbcp-connection-pooling-示例

翟青青
2023-03-14

在mysql中检查当发生此问题时建立了多少连接-您可以使用:

mysql> SHOW FULL PROCESSLIST;

它将为您提供与您的MySQL数据库的打开连接数的信息。

可以尝试使用setAutocommit(true),或者,如果有很多数据(性能问题),则使用批处理模式,依次插入数据,并在每个数据之后提交。

 类似资料:
  • 感谢大家的关注我在spring项目中使用了spring集成,我的项目是一个简单的文件处理,用ftp适配器从ftp获取文件并运行批处理作业将ouput文件放到ftp上,我觉得当文件大小或从服务器获取的文件数太大时,会引发连接超时异常,我的代码如下:

  • 我已经使用弹性Beanstalk在EC2实例中部署了springboot java jar。jar中的api在将用户添加到DB后会发送一个确认邮件。这个功能在localhost中运行良好,但是在aws实例上,我得到了gatway超时504。 这里是SMTP服务器的设置(它是不使用用户名、密码的smart服务器,并且我在服务器中添加了我的EC2公司的公共ip地址)Java SMTP设置: java.

  • 问题内容: 说明: 我试图将一些xml格式的数据发布到API网关。当我使用JAVA HttpsURLConnection将数据发布到Https协议下的一个站点时,收到了 致命警告:handshake_failure 错误。 尝试 1:通过添加启用vm选项的SSL调试, 然后得到以下信息: 尝试 2:尝试使用此解决方案,但没有区别。SSLHandshakeException:收到致命警报:Java

  • 尝试1:通过添加,启用SSL debug with vm选项,然后我得到了以下内容: 尝试2:尝试了这个解决方案,但没有差异。SSLHandShakeException:收到致命警报:Java6->8升级后的handshake_failure 对于@Axelh评论:

  • 我正在用Node、Express和MongoDB构建一个REST api服务。我安装了MongoDB,它在我的PC上运行正常,本地主机:27017。我可以添加集合并阅读它们。在我的app.js文件中,我有这样的设置 我总是得到一个错误-mongoerror-cannot connect UNKNOWN我搜索了几个小时,没有找到任何解决方案。我该如何修复它,使它可以连接到MongoDB(工作正常).

  • 无法解析Android应用程序模块的Gradle配置。请解决gradle构建问题和/或重新同步。