Spring事务整理
Spring事务传播机制
public enum Propagation {
/**
* 支持当前事务,如果不存在就创建一个事务
* 默认配置
*/
REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED),
/**
* 支持当前事务,如果不存在,就以非事务的方法运行
*/
SUPPORTS(TransactionDefinition.PROPAGATION_SUPPORTS),
/**
* 支持当前事务,如果不存在事务就抛出异常
*/
MANDATORY(TransactionDefinition.PROPAGATION_MANDATORY),
/**
* 创建一个新的事务,如果当前存在事务则当前事务挂起
*/
REQUIRES_NEW(TransactionDefinition.PROPAGATION_REQUIRES_NEW),
/**
* Execute non-transactionally, suspend the current transaction if one exists.
* 执行在非事务环境,如果当前存在事务则当前事务挂起
*/
NOT_SUPPORTED(TransactionDefinition.PROPAGATION_NOT_SUPPORTED),
/**
* Execute non-transactionally, throw an exception if a transaction exists.
* 执行在非事务环境,如果存在事务则抛出异常
*/
NEVER(TransactionDefinition.PROPAGATION_NEVER),
/**
* 如果存在当前事务,则在嵌套事务中执行
*/
NESTED(TransactionDefinition.PROPAGATION_NESTED);
Spring事务配置
1、创建java.sql.DataSource的Bean,DataSource由Druid实现。
@Bean(name = "masterProperties")
@ConfigurationProperties(prefix = "druid.master")
public DruidDataSourceProperties getMasterProperties() {
return new DruidDataSourceProperties();
}
@Bean(name = "masterDataSource")
public DataSource getMasterDataSource(@Qualifier("masterProperties") DruidDataSourceProperties properties){
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setUsername(properties.getUsername());
druidDataSource.setUrl(properties.getUrl());
druidDataSource.setDriverClassName(properties.getDriverClass());
druidDataSource.setPassword(properties.getPassword());
return druidDataSource;
}
2、将DataSource交由Spring的DataSourceTransactionManager管理
@Bean
public DataSourceTransactionManager dataSourceTransactionManager(@Qualifier("masterDataSource") DataSource dataSource){
return new DataSourceTransactionManager(dataSource);
}

浙公网安备 33010602011771号