事务管理器的应用

事务分 编程式和声明式两种
在同一个类中调用声明式事务方法是没用的,无法回滚的,需要不同的类,比如在B类中向A类抛异常
声明式事务@Transactional(value = "jtaTransactionManager", rollbackFor = Exception.class) //不赋值的话默认为RuntimeException才回滚,value为指定的事务管理器
同一个类中的事务可以使用编程式事务处理
@Autowired
private TransactionTemplate transactionTemplate;
protected void batchDeal() {
        transactionTemplate.execute(status -> {
            try {
                //业务处理
            } catch (Exception e) {
                logger.info("批量处理异常:", e);
                status.setRollbackOnly();
            } finally {
            }
            return null;
        });
    }

//@Configuration启动容器+@Bean注册Bean,Environment中含有spring配置文件读取的属性,@Primary告诉spring在犹豫的时候优先选择哪一个具体的实现(按类型注入不知道注入哪个的时候),@Qualifier和@Resource感觉没太大区别,不过可以用在参数代码更简洁  
@Configuration
public class TransactionConfiguration {

    private static final String MYSQL_PREFIX = "spring.datasource.hikari.m.";

    @Bean(name = "mysql_data_source")
    @Primary
    @Autowired
    public DataSource mysqlDataSource(Environment environment) {
        PoolProperties poolProperties = new PoolProperties();
        poolProperties.setDriverClassName(environment.getProperty(MYSQL_PREFIX + "driverClassName"));
        poolProperties.setUrl(environment.getProperty(MYSQL_PREFIX + "url"));
        poolProperties.setUsername(environment.getProperty(MYSQL_PREFIX + "username"));
        poolProperties.setPassword(PasswordUtil.getPasswordByKey(PasswordKeyConstants.PHUCP_DB_MYSQL_PD));
        poolProperties.setTestWhileIdle(environment.getProperty("spring.datasource.test-while-idle", Boolean.class));
        poolProperties.setValidationQuery(environment.getProperty("spring.datasource.validation-query"));
        return new DataSource(poolProperties);
    }

    @Bean(name = "jtaTransactionManager")
    @Primary
    public DataSourceTransactionManager jtaTransactionManager(@Qualifier("mysql_data_source")DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "jtaTransactionTemplate")
    @Primary
    public TransactionTemplate jtaTransactionTemplate (@Qualifier("jtaTransactionManager")DataSourceTransactionManager jtaTransactionManager) {
        return new TransactionTemplate(jtaTransactionManager);
    }
}    
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值