在我们正在处理的应用程序中,用户可以通过在文本字段中输入任意的JDBC连接URL来连接到外部RDBMS。我们的一个客户报告说,当他无意中试图连接到带有MySQL JDBC URL的Microsoft SQL server时,我们的应用程序服务器在0%的CPU下冻结(无限期)。
下面的Java片段说明了这种情况:
public static void main(String[] args){
// note: the application running on localhost:1433 is ACTUALLY
// an MS SQL Server instance!
String jdbcUrl = "jdbc:mysql://localhost:1433/my-db";
// enable JDBC Driver Manager logging
DriverManager.setLogWriter(new PrintWriter(System.err));
// set a timeout of 5 seconds for connecting (which is blissfully ignored!)
DriverManager.setLoginTimeout(5);
// open the connection (which should fail, but freezes instead)
try (Connection c = DriverManager.getConnection(jdbcUrl)){
System.out.println("This should never be reached due to wrong JDBC URL.");
}catch(Exception e){
System.out.println("This is expected (but never printed).");
}
System.out.println("This is never printed either.");
}
运行代码段:
问题:
我尝试了其他几个JDBC驱动程序(MySQL、DB2、Oracle...)并且它们都很好地处理了这个问题,只有MariaDB JDBC驱动程序冻结了JVM。
这是我为解决这个问题所做的。技巧是将sockettimeout
添加到连接中。要修复问题中的程序,只需将JDBC URL修改为:
jdbc:mysql:/localhost:1433/my-db?sockettimeout=2000
这个相关问题的答案是我需要的提示。
在nodejs中,根据每个请求打开mongodb连接,然后在回调中关闭它是一种好做法吗? 有人说,没有必要在每个请求上打开/关闭mongodb连接,因为一旦打开,就可以共享一个连接池。 问题是如何维护和共享该池?猫鼬已经自动做到了吗? 尤其是在mongodb超时或断开连接时,是否需要重新连接? 我在这里发现了相互矛盾的答案:是否根据请求关闭mongodb连接 我读到的几乎所有在线doc nodej
问题内容: 我目前正在为大学的一个班级做项目。我正在学习有关连接和操作数据库的信息,我们正在使用Microsoft .accdb文件。 这是我到目前为止所拥有的。 当寻找“ sun.jdbc.odbc.JdbcOdbcDriver”时,我得到以下输出。 似乎很容易解决。看来我想念司机或类似的东西。但是,我很难找到解决方法。JDK随附驱动程序吗?我需要单独下载吗?是否取决于我的操作系统?(Mac O
当Datastax Java Cassandra驱动程序试图连接到您的集群时,如何让它超时? 我特别感兴趣的是当主机可以访问,但Cassandra端口被阻塞或Cassandr守护进程未运行时的情况。我正在编写一个命令行客户端,如果它不能在合理的时间内连接,它应该退出并报告适当的错误消息。目前,如果接触点可以到达,驾驶员似乎会永远等待接触点的响应。 也就是说,如果驱动程序在给定的最长时间内无法与任何
我的java代码使用com.mongodb.DB的单个实例连接到mongo DB。现在我使用这个db实例跨越500个线程,这些线程对我的db执行命令。所有这些都并行运行。以下是conf参数: 现在,如果我使用“db.serverStatus().connections”检查我的数据库,我会得到以下结果:“current”:52,“available”:19999,“totalCreated”:Nu
我试图理解Datastax Cassandra驱动程序中的连池,因此我可以更好地在我的Web服务中使用它。 我有留档的1.0版。它说: Java驱动程序异步使用连接,因此可以在同一个连接上同时提交多个请求。 他们通过连接理解什么?当连接到集群时,我们有:一个生成器、一个集群和一个会话。他们中的哪一个是连接? 例如,有一个参数: MaxSimultaneousRecestsPerConnection
这是我在运行上述程序时遇到的错误。有人解决了这个问题吗? 我尝试过改变Selenium和ChromeDriver的版本,但没有任何效果。