Spring Data (JPA) Repository 是线程安全的吗?(又名 SimpleJpaRepository 线程安全)

2022-01-18 00:00:00 java jpa spring-data spring-data-jpa

我正在使用 Spring Data (JPA) 存储库 来处理 CRUD 样板.

I am using a Spring Data (JPA) repository to take care of CRUD boilerplate.

我这样定义我的存储库接口:

I define my repository interface like so:

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.

Spring then auto-magically generates me an implementation of said interface. What we get back is a proxy, but I believe that eventually we get down to a org.springframework.data.jpa.repository.support.SimpleJpaRepository.

JdkDynamicAopProxy 是线程安全的如果 底层目标类是线程安全的.因此问题是:SimpleJpaRepository 线程安全吗?

A JdkDynamicAopProxy is thread-safe if the underlying target class is thread-safe. The question therefore is: is SimpleJpaRepository thread safe?

推荐答案

一般来说,是的.它假设一个托管 EntityManager 我们将从 Spring 的工厂类(如果您使用 Spring 作为容器)或作为 CDI 托管 bean(通过 @Producer方法).

Generally, yes. It's assuming a managed EntityManager which we'll either obtain from Spring's factory classes (in case you're using Spring as container) or as a CDI managed bean (declared through an @Producer method).

相关文章