spring boot基於註解的宣告式事務配置
阿新 • • 發佈:2018-12-29
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”)