Spring/Spring Data JPA

[Spring Data JPA] 2-1. Configuration

noahkim_ 2023. 10. 18. 01:53

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 { ... }

 

 

출처