我用的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
可能的原因有:
使用了事务管理,连接失败时被事务回滚了
如果在一个事务方法内调用了获取连接的操作,并且该事务后续因为其它原因回滚。
那么在这个事务方法内获取连接失败时也不会抛出异常。
自定义了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写错,使用其他数据库
druid 久经验证,不会有问题的,换个高版本看看或者把初始大小置成0试一下。
原回答者GitHub用户WangChangJuan
根据您的描述,您在使用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=0
和break-after-acquire-failure=true
后,虽然Druid不再重复尝试连接,但MyBatis方法仍无法返回,而是一直卡在那里。有些人建议切换到Hikari连接池。
这个问题可能与MSSQL Server JDBC引发的异常有关。它抛出的是普通的SQL异常,但其中包含了错误代码,解释了错误的原因。
根据您的情况,我可以给出以下建议:
请注意,以上建议仅供参考,并可能需要根据您的具体情况进行调整。希望这些信息能对您有所帮助!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。