版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013899461/article/details/79021344
spring boot基于注解的声明式事务配置
事务配置
1、配置方式一
1)开启spring事务管理,在spring boot启动类添加注解@EnableTransactionManagement(proxyTargetClass = true);等同于xml配置方式的 <tx:annotation-driven />
(注意:1项目中只需配置一次,2需要配置proxyTargetClass = true)
2)在项目中需要添加事务的类或方法上添加注解@Transactional(建议添加在方法上),一般使用默认属性即可,若要使用事务各属性可查看spring事务官方文档了解
2、配置方式二(指定事务,需要多个事务管理器时用)
1)开启事务管理:创建多个事务,如下例子
@Configuration
@EnableTransactionManagement(proxyTargetClass = true)
public class TransactionConfig implements TransactionManagementConfigurer{
@Value("${spring.datasource.driver-class-name}")
private String driverClassName;
@Value("${spring.datasource.druid.url}")
private String url;
@Value("${spring.datasource.druid.username}")
private String username;
@Value("${spring.datasource.druid.password}")
private String password;
@Bean
public DataSource dataSourceDb() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClassName);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
/**
* 【作用】事务管理器<br>
* 【说明】(无)
* @param
* @author Kalvin
* @Date 2017/12/19 10:39
*/
@Bean
public PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSourceDb());
}
// 创建事务管理器2
@Bean(name = "txManager2")
public PlatformTransactionManager txManager2(EntityManagerFactory factory) {
return new JpaTransactionManager(factory);
}
/**
* 【作用】如果没有指定事务,默认返回当前事务管理<br>
* 【说明】(无)
* @param
* @author kkyc
* @Date 2017/12/19 10:03
*/
@Override
public PlatformTransactionManager annotationDrivenTransactionManager() {
return transactionManager();
}
}
到这里已经成功整合好事务配置了,你只需要在使用的地方添加注解@Transactional即可,如果需要限定事务管理器,可使用@Transactional(“txManager2”)