我正在迁移一个带有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
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访问,外部访问被阻止
我解决了问题。我认为是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-示例
在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(工作正常).
null 任何想法都将受到赞赏。