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

MariaDB JDBC驱动程序是否忽略连接超时?

燕野
2023-03-14

在我们正在处理的应用程序中,用户可以通过在文本字段中输入任意的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.");
}

运行代码段:

    null

问题:

  • 1)这可能是MariaDB JDBC驱动程序中的一个bug吗?谷歌搜索没有发现这方面的任何问题。
  • 2)如何解决此问题?我不希望当用户意外插入无效的JDBC URL时服务器冻结。

我尝试了其他几个JDBC驱动程序(MySQL、DB2、Oracle...)并且它们都很好地处理了这个问题,只有MariaDB JDBC驱动程序冻结了JVM。

共有1个答案

谷梁宁
2023-03-14

这是我为解决这个问题所做的。技巧是将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

  • 我在向Pentaho数据集成添加MSSQL SERVER连接时遇到问题。 我尝试了以下方法: 我已经下载了最新的jdbc驱动程序(sqljdbc42)并将它们移动到lib文件夹 我在SQL SERVER中创建了一个新用户,并授予了它所有权限...没有帮助。 非常确定用户名/密码和登录设置 多次重新安装Pentaho,重新安装JDBC驱动程序 我有一台Mac,但在平行上使用Windows,我在这个环