gpt4 book ai didi

java - 在 Java/Spring 中处理与数据库相关的异常

转载 作者:搜寻专家 更新时间:2023-10-30 23:23:57 25 4
gpt4 key购买 nike

我正在看书Spring Recipes现在,我对一件事感到困惑:任何异常都作为 DataAccessException 的子类抛出,这是一个您不打算尝试/捕获的 RuntimeException。

我担心的是更可能发生的问题,尤其是插入时。如果您使用类似 SimpleJdbcTemplate 的东西,每个查询都是它自己的事务,所以您不能确保表中不存在键,然后使用 getSimpleJdbcTemplare.update() 进行插入,因为键可能已插入两个查询之间.

显然,与生产系统中的 RuntimeException 相比,这是人们希望更优雅地处理的事情。那你是怎么处理的?

谢谢。

最佳答案

a RuntimeException you're not meant to try/catch.

谁说的?您必须 捕获RuntimeException,但没有什么可以阻止您这样做,这是完全可以接受的。例如,DataAccessException 的一个子类称为 RecoverableDataAccessException,它专门用于捕获以便可以尝试重试。还有 OptimisticLockingFailureException,它解决了由于乐观锁定导致的下一个事务冲突点,也可以由应用程序专门捕获和处理。

If you're using something like SimpleJdbcTemplate each query is its own transaction

不是真的。如果你使用 Spring 的 transactional semantics ,然后 SimpleJdbcTemplate(或您使用的任何 DAO 组件)将参与事务,如果数据库和事务管理支持它(大多数应该支持),则具有完整的 ACID 语义。对于您的示例,您可以在一个事务中执行 select for update(或您的数据库支持的任何内容),然后执行 insert

Spring 的数据访问层可能是它最好的特性,但很少有人因此获得赞誉。

关于java - 在 Java/Spring 中处理与数据库相关的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2367309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com