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);
 }

posted @ 2021-01-20 21:53  往事随雨  阅读(36)  评论(0)    收藏  举报