开发者社区> 问答> 正文

简介数据库报错的时候,如何能捕获exception

当连接池无法连接到数据库(用户名密码错误)的时候,连接池会反复的尝试连接。这个时候连接池并不会抛出exception。这样导致调用的程序hang死。有没有什么办法,能让调用的函数(应用程序)知道,连接出了问题?

原提问者GitHub用户ut777

展开
收起
山海行 2023-07-05 19:36:18 80 0
4 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    1.JDBC捕获
    通过JDBC API来访问数据库,可以直接捕获底层的SQLException。
    2.ORM框架捕获

    1. DataSource事务捕获
      Service层捕获到异常会导致事务回滚,数据库操作被取消。

    三种方式各有优点,一般可以从最底层JDBC开始捕获,上层根据业务需要选择失捕获。

    即使ORM框架抛出的是定义好的异常,我们仍然可以根据异常消息来判断数据库层异常原因。

    所以最简单直接的方式是直接捕获底层的JDBC异常,其他方式都建立在此基础上。

    2023-07-30 16:08:08
    赞同 展开评论 打赏
  • 设置连接超时时间:可以通过设置连接池的maxWait属性来指定连接的超时时间。将此值设置为较小的值,以便在连接超时时尽快获取异常。

    设置最大重试次数:可以在连接池的配置中设置maxRetries属性,指定连接重试的最大次数。当连接无法建立时,连接池将重试指定的次数后放弃,并抛出异常。

    2023-07-11 09:39:42
    赞同 展开评论 打赏
  • 可以通过配置maxWait参数解决

    原回答者GitHub用户wenshao

    2023-07-06 11:01:55
    赞同 展开评论 打赏
  • 当连接池无法连接到数据库时,可以通过以下方法让调用的函数(应用程序)知道出现了连接问题:

    1. 设置连接超时时间:在连接池配置中设置一个适当的连接超时时间。如果连接尝试超过该时间仍未成功,则认为连接失败,并抛出异常。这样调用的函数可以捕获该异常并作相应处理。

    2. 使用心跳检测:连接池可以定期发送一个简单的查询请求到数据库,以检测连接是否正常。如果心跳检测失败,则连接池可以抛出异常,通知调用的函数连接出现问题。

    3. 捕获异常:在调用连接池的代码块中,使用try-catch语句捕获可能出现的异常,如数据库连接异常、连接池异常等。在catch块中处理异常,并通知调用的函数连接出现问题。

    4. 监控连接池状态:实现一个监控系统,定期检查连接池的状态。如果连接池处于不可用状态,可以通过日志或其他方式通知调用的函数连接出现问题。

    综上所述,通过设置连接超时时间、使用心跳检测、捕获异常和监控连接池状态等方法,可以使调用的函数能够及时知道连接出现问题,并进行相应处理,避免hang死的情况发生。

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

相关电子书

更多
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载
云时代的数据库技术趋势 立即下载
超大型金融机构国产数据库全面迁移成功实践 立即下载