多线程事务管理

业务代码采用声明式事务管理,但在多线程环境下出现noTransaction错误,导致数据库查询时报错但不影响搜索。为解决此问题,将数据库操作集中到一个类,并在该类上添加@Transaction和@Scope('prototype')注解,通过ObjectFactory获取bean以创建多个实例,确保事务正确管理。
摘要由CSDN通过智能技术生成

业务代码使用声明式事务管理,每个Bean都会被事务管理。
开启多线程,在数据库中查数据,会报noTrasaction错误,但不影响搜索。但是一直报错,看着也挺让人不舒服。
改进:把涉及到数据库的代码提到一个类中,并在这个类上加@Transaction注解,同时也需要加@Scope(“prototype”)注解,创建多个实例。
在注入的时候,注入ObjectFactory ,通过objectFactory.getObject()方法获取bean。

@Named
public class ServiceA {  
   
@Autowired  
private ObjectFactory<ServiceB> objectFactory;  
   
    @Transactional  
    public void threadMethod(){  
        this.insert();  
        System.out.println("main insert is over");  
        for(int a=0 ;a<3;a++){  
            ThreadOperation threadOperation= new ThreadOperation();  
            Thread innerThread = new Thread(threadOperation);  
            innerThread.start();  
        }  
    }  
   
    public  class ThreadOperation implements Runnable {  
        public ThreadOperation(){  
        }  
        @Override 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值