PAS部署:springboot应用部署在PAS中,测试接口先进行数据插入,而后程序报错,因添加了事务正常应该回滚,但目前数据还是入库了

【问题描述】

springboot应用部署在PAS中,具体接口测试场景如下:

先进行数据插入,而后程序报错,由于添加了事务,正常数据应该回滚,但是目前数据还是进了库

【解决方案】

问题原因:

一般Springboot下包含DataSourceTransactionManager与JtaTransactionManager等事务管理器。
- JtaTransactionManager应用于JNDI下的事务管理。
- DataSourceTransactionManager应用于普通JDBC下事务管理。

通常JDBC事务需要DataSourceTransactionManager事务管理器,而由于某些版本SpringBoot下的JtaTransactionManager比DataSourceTransactionManager事务管理器优先级更高,所以导致事务回滚不生效。

项目中解决方案:

项目添加JDBC事务管理器配置,优先开启DataSourceTransactionManager。具体配置参考如下代码:

import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnSingleCandidate;
import org.springframework.boot.autoconfigure.transaction.TransactionManagerCustomizers;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;

import javax.sql.DataSource;

/**
 * @author William.Q
 */
@Configuration
public class DataSourceTransactionManagerConfiguration {

    @Primary
    @Bean
    DataSourceTransactionManager transactionManager(DataSource dataSource,
                                                    ObjectProvider<TransactionManagerCustomizers> transactionManagerCustomizers) {
        DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(dataSource);
        transactionManagerCustomizers.ifAvailable((customizers) -> customizers.customize(transactionManager));
        return transactionManager;
    }

}

【原文链接】

http://doc.primeton.com/pages/viewpage.action?pageId=82157148

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值