返回介绍

使用 Spring Framework 的事务标注

发布于 2025-04-21 21:42:17 字数 1110 浏览 0 评论 0 收藏

在具体的类或者接口上可以添加 Transactional 标注,为类或方法增加事务管理。如果用 Transactional 对一个类进行标注,其设置将会应用到类中定义的每个方法。如果用 Transactional 对一个方法进行标注,事务设置将只应用到某个单独的方法。如果对类和方法都是应用了 Transactional 标注,对方法进行的标注比对类进行的标注具有更高的优先权。

通过 Transactional 标注,可以控制事务的隔离级别、超时时间、传播(propagation)设置以及会导致事务回滚的一组异常。例如,如果我们希望总是用可序列化的隔离级别创建一个新的事务,在一分钟之内没有完成或发生了 NumberFormatException 异常,就回滚事务,就可以编写类似例 D-1 所示的代码。

例 D-1:更多的事务配置控制选项

@Transactional(readOnly=false,

propagation=Propagation.REQUIRES_NEW,

isolation=Isolation.SERIALIZABLE,

rollbackFor={NumberFormatException.class},

timeout=60)

public abstract void run();

如果使用 Transactional 标注,需要小心选择标注放置的位置。如果先使用了 Spring 中的代理,或者准备要研究一下 Spring 中为 Aspect-Oriented Programming(AOP)提供的引人注目的支持,你需要注意尽可能避免把 Transactional 标注放到接口上,还需要注意要将 Transactional 标注放在非 public 的方法上。在这个示例中,因为我们没有使用任何 Spring 的 AOP 功能,所以就把 Transactional 标注放在了一个接口上。如果你正在为一个系统调试错误,其中省略了 Transactional 标注,这时需要做的第一件事情就是验证标注过的方法是否是 public 的。如果使用 AspectJ 或早期的 Spring AOP 功能,在使用代理或 AOP 时,总会遇到些令人混淆的问题。如果决定使用 Spring 的 AOP 功能,就应该记得务必将 @Transactional 标注放在具体的类上。

注意:如果对这些术语不熟悉,看看下面表格的解释会有帮助。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。