开发者社区> 问答> 正文

连接失败时调用不返回

我用的spring boot (starter 2.1.5.RELEASE)+mybatis (starter 2.0.1)+druid (starter 1.1.17)+mssqlserver jdbc 7.2.2.jre8+swing, jdk 1.8.212,开发的。

spring boot配置使用的多数据源,使用druid连接池。

在修改配置为错误的ip端口,或错误的数据库名字后,第一次调用mybatis的方法,druid初始化连接,会抛出mssql的sql exception,报连接错误;但是druid会不断尝试重复连接,不会返回。

参考网上的讲解,配置了 connection-error-retry-attempts=0 break-after-acquire-failure=true 后,虽不再重复尝试连接,但mybatis的方法调不会返回,而一直卡在那里了。 对此,网上也有说druid有问题,不如切换hiraki的。

也许这个mssqlserver jdbc 抛出的异常有关?抛出的是普通的sql exception,不过带了错误代码解释了错误的原因。

原提问者GitHub用户corn-nut-birdie

展开
收起
山海行 2023-07-05 19:34:51 69 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    可能的原因有:

    使用了事务管理,连接失败时被事务回滚了
    如果在一个事务方法内调用了获取连接的操作,并且该事务后续因为其它原因回滚。

    那么在这个事务方法内获取连接失败时也不会抛出异常。

    自定义了DataSource,重写了方法并没有抛出异常
    如果使用自定义的数据源,并重写了getConnection()方法,而在方法内没有抛出连接失败的异常,那么就不会返回异常。

    数据源设置了removeAbandoned属性
    algunas fuentes de datos tienen un atributo removeAbandoned que elimina automáticamente las conexiones abandonadas en lugar de devolver una excepción.

    使用了连接池,池中有可用连接
    即使此时连接数据库失败,仍然有可用连接被获取,因此不会返回异常。只会打印错误日志。

    Cache或Hystrix等组件捕获了异常
    如果DataSource在Cache或Hystrix等组件里,它们可能捕获了SQLException并处理,而不再抛出。

    数据库连接URL写错,使用其他数据库

    2023-07-30 16:36:35
    赞同 展开评论 打赏
  • druid 久经验证,不会有问题的,换个高版本看看或者把初始大小置成0试一下。

    原回答者GitHub用户WangChangJuan

    2023-07-06 11:01:51
    赞同 展开评论 打赏
  • 根据您的描述,您在使用Spring Boot(2.1.5.RELEASE)、MyBatis(2.0.1)、Druid(1.1.17)、MSSQL Server JDBC(7.2.2.jre8)以及Swing和JDK 1.8.212进行开发。

    当您将配置更改为错误的IP地址、端口或数据库名称后,第一次调用MyBatis方法时,Druid会尝试初始化连接,并抛出MSSQL的SQL异常来报告连接错误。然而,Druid会持续不断地尝试重新连接,而不会返回。

    根据网上的解释,您尝试配置connection-error-retry-attempts=0break-after-acquire-failure=true后,虽然Druid不再重复尝试连接,但MyBatis方法仍无法返回,而是一直卡在那里。有些人建议切换到Hikari连接池。

    这个问题可能与MSSQL Server JDBC引发的异常有关。它抛出的是普通的SQL异常,但其中包含了错误代码,解释了错误的原因。

    根据您的情况,我可以给出以下建议:

    1. 确保您的数据库连接配置正确无误,包括IP地址、端口和数据库名称。
    2. 检查Druid的配置,确保没有其他设置影响到连接行为。
    3. 尝试在代码中捕获并处理MSSQL Server JDBC抛出的异常,以提供更好的错误处理和用户反馈。
    4. 考虑尝试使用Hikari连接池代替Druid,看看是否能够解决这个问题。您可以根据Spring Boot的文档设置Hikari作为您的连接池。

    请注意,以上建议仅供参考,并可能需要根据您的具体情况进行调整。希望这些信息能对您有所帮助!

    2023-07-05 19:54:08
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载