1. Annotation-based Configuration
- JPA를 사용하기 위한 주요 구성 요소를 어노테이션으로 정의합니다.
구성 요소 | 설명 |
@EnableJpaRepositories |
Spring Data JPA의 리포지토리를 스캔하여 활성화하는 어노테이션.
Repository 인터페이스에 대한 구현체를 프록시 형태로 제공 |
EntityManagerFactory | EntityManager 인스턴스를 생성하고 관리 - JPA 구현체 생성 시 사용하는 기본 인터페이스. |
- LocalContainerEntityManagerFactoryBean | EntityManagerFactory를 설정하고 관리 - Spring과 JPA를 통합 (Spring 예외 처리 통합) |
JpaTransactionManager |
EntityManager와 통합하여 트랜잭션을 관리하는 역할을 함.
|
설정
더보기
@Configuration
@EnableJpaRepositories
@EnableTransactionManagement
class ApplicationConfig {
@Bean
public DataSource dataSource() {
EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
return builder.setType(EmbeddedDatabaseType.HSQL).build();
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
vendorAdapter.setGenerateDdl(true);
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
factory.setJpaVendorAdapter(vendorAdapter);
factory.setPackagesToScan("com.acme.domain");
factory.setDataSource(dataSource());
return factory;
}
@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
JpaTransactionManager txManager = new JpaTransactionManager();
txManager.setEntityManagerFactory(entityManagerFactory);
return txManager;
}
}
2. Bootstrap Mode
- Spring Data JPA의 Repository 초기화를 어떻게 처리할 것인지에 대한 정의
Mode | 설명 | 초기화 시점 | 특징 |
DEFAULT | 즉시 초기화 | 애플리케이션 컨텍스트 시작 시점 | Spring의 기본 빈으로 등록 빠르게 리포지토리 초기화 메타데이터 분석 및 검증을 진행 (JpaEntityManager) |
LAZY | 지연 초기화 | 실제 리포지토리 사용 시점 (프록시를 통해 초기화) |
리포지토리는 실제로 필요할 때까지 초기화되지 않음
프록시 객체가 먼저 생성되고 실제 동작은 나중에 진행 |
DEFERRED | 지연 초기화 | 애플리케이션 컨텍스트 초기화 종료 후 (ContextRefreshedEvent) |
JPA EntityManagerFactory가 완전히 초기화된 후 초기화됨
멀티스레딩을 통해 백그라운드에서 EntityManagerFactory 초기화 |
설정
더보기
@EnableJpaRepositories(bootstrapMode = BootstrapMode.DEFERRED)
public class JpaConfig { ... }
출처
'Spring > Spring Data JPA' 카테고리의 다른 글
[자바 ORM 표준 JPA 프로그래밍] 3. 영속성 관리 (0) | 2023.11.28 |
---|---|
[자바 ORM 표준 JPA 프로그래밍] 2. JPA 시작 (0) | 2023.11.28 |
[자바 ORM 표준 JPA 프로그래밍] 1. JPA 소개 (0) | 2023.11.28 |
[Spring Data JPA] 2-2. Transactionality (0) | 2023.10.18 |
[Spring Data JPA] 1. Core concepts (1) | 2023.10.17 |