我正在寻找下一个问题的解决方案。我使用 Spring 并且我有一些不应被阻止的执行程序线程(至少读/写数据库)。有几个任务可以通过这个执行器执行,我不知道哪个可以使用@Transactional方法或任何其他方式来访问数据库。我想禁止在执行者线程中打开新事务,怎么做?
小例子
@Component
public class Service {
public void execute() {
System.out.println("I don't need transaction to execute");
}
}
@Component
public class Service2 {
@Transactional
public void execute() {
System.out.println("I've opened new transaction!");
}
}
@Component
public class NonTransactionalExecutor {
@Autowired
private ThreadPoolExecutor threadPoolExecutor;
@Autowired
private Service service;
@@Autowired
private Service2 service2;
public void doInExecutor() {
threadPoolExecutor.execute(new Runnable() {
@Override
public void run() {
// Is there anything I could do to get exception on service2.execute?
service.execute();
service2.execute();
}
});
}
}
PS 在现实世界中,当方法被注释时,@Transactional它会尝试TransactionManager使用数据库中的当前值打开新事务(我使用的是 Postgres)。
智慧大石
相关分类