我正在使用一个Spring Data(JPA)存储库来处理CRUD样板。
我的存储库接口定义如下:
import org.springframework.data.repository.CrudRepository;
public interface FooRepository extends CrudRepository<Foo, Long>
{
public Foo findByXAndYAndZ(X x, Y y, Z z);
}
然后Spring会自动地为我生成该接口的实现。我们得到的是一个代理对象,但我相信最终我们会使用 org.springframework.data.jpa.repository.support.SimpleJpaRepository
。
JdkDynamicAopProxy
是线程安全的, 如果 底层目标类也是线程安全的。因此问题是: SimpleJpaRepository
是线程安全的吗?
EntityManager
使得SimpleJpaRepository
线程安全吗? - Greg KopffEntityManager
行为规范的简单结果。默认情况下,它不是线程安全的,因此需要进行管理(即:正确地绑定到线程并代理以指向线程绑定的实例)。在Spring中,通过使用SharedEntityManagerCreator
来实现。在CDI的情况下,容器会为您完成这项工作。 - Oliver Drotbohm