无法在spring JPA中使用多线程删除多个数据库中的数据

时间:2014-05-29 07:28:11

标签: java spring hibernate jpa transactions

我目前正致力于数据库操作,以删除不同数据库中的数据。 我想在Spring JPA中运行并行线程来删除不同数据库中的数据。我能够顺序执行它。

@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, readOnly = false)

public void changeAmt() {

//routing db for thread

Query query = (Query)entityManager.createNamedQuery("update_payment_card");
    recordCount=query.executeUpdate();

}

我观察到只要有对此函数的调用,spring就会使用DB

获取transactionInterceptor连接

所以每次线程调用此方法时,底层数据库连接都会发生变化。

因此只有一个数据库受影响。

提前致谢

1 个答案:

答案 0 :(得分:1)

即使您使用连接池,连续调用之间的连接对象引用也可能不同,因为该池将为您提供下一个可用的缓存连接。

  

所以每次一个线程调用这个方法的底层数据库连接   变化。

     

因此只有一个数据库受影响。

您通常为一个数据库架构配置一个DataSource。但是多个并发请求可能会使用多个连接到此数据源。如果您使用多个数据库,则应该有多个数据源,并且可以使用JTA来跨越多个数据源的全局事务。