业务代码使用声明式事务管理,每个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