栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

关于springboot中的事务注解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于springboot中的事务注解

前: 在项目运行时,由于某条数据插入失败,发现事务未起作用

看了下启动类并没有加@EnableTransactionManagement注解开启事务

@EnableScheduling
@SpringBootApplication
@MapperScan(basePackages = "com.huofu.koudai.mapper")
@EnableConfigurationProperties(OssProperties.class)
@EnableTransactionManagement
public class AppApplication {

     public static void main(String[] args) {

          SpringApplication.run(AppApplication.class, args);
         }


    @Bean
    public OssTemplate ossTemplate(OssProperties properties) {
        return new OssTemplate(properties);
    }
}

在添加了注解后发现事务仍然不起作用,查阅资料后发现springboot的自动装配自动开启了事务管理

具体流程如下:

查看启动类的核心注解

找到自动装配注解

进入自动装配注解查看选择器

 继续进入选择器,查看选择器所导入的类,找到自动获得的Entity

找到该方法

 此方法传入一个元数据

此方法中的loadFactoryNames方法, 就是加载所有的组件的全限类

进入 loadFactoryNames方法,此方法第一个参数为类型,第二个参数为类加载器,返回值为本类的loadSpringFactories方法

 查看loadSpringFactories方法

getResources获取自动配置组件
public static final String FACTORIES_RESOURCE_LOCATION = "meta-INF/spring.factories";

找到public class AutoConfigurationimportSelector类所在的包,查看它的meta-INF文件,找到spring.factories文件:

 进入此文件我们可以看到,事务的自动装配配置类,当Springboot容器启动的时候,首先会扫描此文件,会自动为我们加载事务相关信息

因此,springboot项目并不需要@EnableTransactionManagement注解开启事务

接下来,继续查找事务不生效的原因:

最终查询到在Spring的Transactional的API文档中,有以下一段说明:

If no rules are relevant to the exception, it will be treated like DefaultTransactionAttribute (rolling back on runtime exceptions)

意思是:如果没有与异常相关的规则,它将被视为默认事务属性(即回滚运行时异常)。

因此需要指定注解属性为@Transactional(rollbackFor = Exception.class),这样,便可回滚所有异常.

总结:

① springboot自动装配会自动开启事务,不需要@EnableTransactionManagement注解开启事务

② spring声明式事务,需要在@Transactional注解添加rollbackFor指定回滚类型,否则默认只回滚运行时异常

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/709577.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号