千家信息网

Spring中propagation属性的作用是什么

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,Spring中propagation属性的作用是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在Spring的事务管
千家信息网最后更新 2026年11月04日Spring中propagation属性的作用是什么

Spring中propagation属性的作用是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

在Spring的事务管理中,我们可以使用@Transactional来对事务进行声明式的设定。具体而言,就是在类或者方法前添加@Transactional并传入属性参数以获取所需要的Transaction特性。Spring中的@Transactional有5个属性:Propagation、Isolation、Rollback Rules、Timeout和Read-Only,其中Propagation属性定义了Transaction的边界 - 是否使用Transaction、在Transaction已存在的情况下如何表现等。

在service类前加上@Transactional,声明这个service所有方法需要事务管理。每一个业务方法开始时都会打开一个事务。

Spring默认情况下会对运行期例外(RunTimeException)进行事务回滚。这个例外是unchecked,如果遇到checked意外就不回滚。

如何改变默认规则:
1 让checked例外也回滚:在整个方法前加上 @Transactional(rollbackFor=Exception.class)
2 让unchecked例外不回滚: @Transactional(notRollbackFor=RunTimeException.class)
3 不需要事务管理的(只查询的)方法:@Transactional(propagation=Propagation.NOT_SUPPORTED)

在整个方法运行前就不会开启事务
还可以加上:@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true),这样就做成一个只读事务,可以提高效率。

各种属性的意义:
REQUIRED:业务方法需要在一个容器里运行。如果方法运行时,已经处在一个事务中,那么加入到这个事务,否则自己新建一个新的事务。

NOT_SUPPORTED:声明方法不需要事务。如果方法没有关联到一个事务,容器不会为他开启事务,如果方法在一个事务中被调用,该事务会被挂起,调用结束后,原先的事务会恢复执行。

REQUIRESNEW:不管是否存在事务,该方法总汇为自己发起一个新的事务。如果方法已经运行在一个事务中,则原有事务挂起,新的事务被创建。

MANDATORY:该方法只能在一个已经存在的事务中执行,业务方法不能发起自己的事务。如果在没有事务的环境下被调用,容器抛出例外。

SUPPORTS:该方法在某个事务范围内被调用,则方法成为该事务的一部分。如果方法在该事务范围外被调用,该方法就在没有事务的环境下执行。

NEVER:该方法绝对不能在事务范围内执行。如果在就抛例外。只有该方法没有关联到任何事务,才正常执行。

NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中。如果没有活动事务,则按REQUIRED属性执行。它使用了一个单独的事务,这个事务拥有多个可以回滚的保存点。内部事务的回滚不会对外部事务造成影响。它只对DataSourceTransactionManager事务管理器起效。

Propagation属性outMethodinnerMethod
Propagation.MANDATORY抛出异常在outMethod的Transaction中运行
Propagation.NEVER不在Transaction中运行抛出异常
Propagation.NOT_SUPPORTED不在Transaction中运行outMethod的Transaction暂停直至innerMethod执行完毕
Propagation.REQUIRED ( 默认值 )新开一个Transaction并在其中运行在outMethod的Transaction中运行
Propagation.REQUIRES_NEW新开一个Transaction并在其中运行outMethod的Transaction暂停直至innerMethod中新开的Transaction执行完毕
Propagation.SUPPORTS不在Transaction中运行在outMethod的Transaction中运行

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

事务 方法 运行 属性 事务管理 管理 业务 容器 范围 情况 环境 新开 关联 帮助 活动 作用 清楚 意外 个例 内容 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 深圳九邦互联网科技有限公司 腾讯阿里互联网科技 互联网金融公司科技 上海卓越科技 互联网 甘肃拓世互联网科技有限公司 互联网巨头投资的硬核科技 中国科技互联网公司收入 欧洲十大科技互联网公司 昭通云南众福互联网科技有限公司 湖南诚度互联网科技有限公司 黑科技闪耀互联网之光 长沙茂晟互联网科技有限公司 保险科技服务互联网营销体系 区块链结合互联网科技 山东子淼互联网科技有限公司 深圳互联网科技的发展 上海互联网科技公司ppt 普陀区互联网教育科技管理办法 福仕德教育科技互联网 互联网的科技体现在哪里 亿人帮互联网科技有限公司 互联网科技产业 互联网的科技创新 互联网金融 金融科技 腾讯科技 互联网女皇 互联网金融和金融科技 武汉健翔互联网络科技有限公司 中国互联网十大科技股排名 互联网公司黑科技创始人 众联互联网络科技
0