Spring JPA多线程

时间:2012-11-09 16:31:36

标签: java multithreading spring jpa threadpoolexecutor

我们正在构建产品,因此从性能的角度来看,我需要一些帮助。 我们正在使用完整的Spring(MVC,JPA,Security等..)

我们有一个要求,即对于特定流程,可以同时执行100个业务规则。可能有n个此类流量和业务规则。

这些规则在执行时实际上从数据库中的表中获取记录,这些规则也包含很少的LAZILY INITIALIZED ENTITIES。

我使用Futures / Callables进行多线程处理,但问题是无法加载LAZY变量。它给出了Hibernate加载异常,可能是TRANSACTIONAL中的一些问题没有在不同的线程中分布。

如果还有其他办法可以告诉我吗?

2 个答案:

答案 0 :(得分:1)

如果某个实体/实体集合是延迟获取的,并且您在另一个线程中访问它,则会遇到LazyInitialization异常,因为只能在事务中访问延迟加载的实体,并且事务不会跨越,线程。

您可以使用DTO模式,或者如果您跨线程共享实体,请在事务中调用其惰性初始化集合getter,以便在事务本身内获取它们。

答案 1 :(得分:0)

如果您确实需要异步处理,那么我建议您使用Java EE指定的方式,即使用JMS / MDB

无论如何,因为您似乎希望无论如何都要加载所有数据以进行处理。所以急切获取所有必需的数据,然后提交数据进行并行处理。或者让TasksCallables)中的每一个获取所需的数据。基本上,我要求您更改您的设计,以便事务边界不会跨越多个线程。在单个线程中本地化边界。