优秀的编程知识分享平台

网站首页 > 技术文章 正文

Spring Boot v2.x中的自动配置和事务管理分析

nanyue 2024-09-03 16:32:54 技术文章 6 ℃

事务的作用就是为了保证用户的每一个操作都是可靠的,事务中的每一步操作都必须成功执行,只要有发生异常就会退到事务开始未进行操作的状态。

事务管理是Spring框架中最为常用的功能之一,我们在使用Spring Boot开发应用时,一些业务场景也需要使用事务。


一、Spring boot中的自动配置

spring boot与spring mvc的一个重要区别就是spring boot遵循“约定优于配置”这一原则,而spring-boot-autoconfigure模块正是完美的实现这个原则。

spring boot autoconfigure的本质就是自动配置spring的各种bean,然后使应用可以通过@Autowired等注入方式来直接使用bean。

Spring boot 启动应用入口已经添加了@SpringBootApplication注解,所以不必再写@EnableAutoConfiguration注解了。

那spring boot是如何实现自动配置的?它怎么知道需要加载哪些AutoConfiguration?

这个其实是用到了spring-factories机制,这里简单说一下它在autoconfigure中的应用,我们直接来看一下spring-boot-autoconfigure-2.2.2.RELEASE.jar包下的spring.factories文件。

key是org.springframework.boot.autoconfigure.EnableAutoConfiguration,value是每个以逗号隔开的AutoConfiguration,结合spring-factories的运行原理,所有的自动配置是从这里开始加载的。


TransactionAutoConfiguration是Spring Boot关于事务的自动配置类。它仅在类PlatformTransactionManager存在于classpath上时生效。

在TransactionAutoConfiguration 类中,已通过 @EnableTransactionManagement注解开启事务。

在Spring Boot中,当我们使用了spring-boot-starter-jdbc或spring-boot-starter-data-jpa依赖的时候,框架会自动默认分别注入DataSourceTransactionManager或JpaTransactionManager,所以我们不需要任何额外配置就可以用@Transactional注解进行事务的使用。

在pom.xml 文件中,当我们添加mybatis 依赖包时,会自动添加对spring-boot-starter-jdbc的依赖,如下所示:

<dependency>

<groupId>org.mybatis.spring.boot</groupId>

<artifactId>mybatis-spring-boot-starter</artifactId>

<version>1.3.2</version>

</dependency>

这样,在spring boot项目中,就会自动注入DataSourceTransactionManager。

DataSourceTransactionManager 将会拦截标注有@Transactional注解的方法。因此,之前使用的@EnableTransactionManagement注解就不必添加了。



二、声明式事务

Spring支持声明式事务,即使用注解来选择需要使用事务的方法,它使用@Transactional注解在方法上表明该方法需要事务支持。

@Transactional

public void saveSomething(Long id, String name) {

//数据库操作

}

在此处需要特别注意的是,此@Transactional注解来自org.springframework.transaction.annotation包,而不是javax.transaction。

被 @Transactional 注解的方法,将支持事务。如果注解在类上,则整个类的所有方法都默认支持事务。

最近发表
标签列表