Spring

Spring database config bean 다중 설정 예제 by JPA

curiousKidd 2024. 4. 4. 10:57
반응형

database와의 연결 설정 파일을 다중으로 사용해야할 경우, main으로 사용 할 config를 지정해주어야한다.
@Praimary 어노테이션을 통해서 의존성 주입시 최우선 bean임을 명시해줄 수 있다

@Configuration
@EnableJpaRepositories
@EnableTransactionManagement
class ApplicationConfig {

  @Bean
  @Praimary // 해당 어노테이션을 통해서 메인 설정임을 지정해주어야함
  public DataSource dataSource() {

    EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
    return builder.setType(EmbeddedDatabaseType.HSQL).build();
  }

  @Bean
  @Praimary // 해당 어노테이션을 통해서 메인 설정임을 지정해주어야함
  public LocalContainerEntityManagerFactoryBean entityManagerFactory(
            EntityManagerFactoryBuilder builder,
            DataSource dataSource) {
        return builder
                .dataSource(dataSource)
                .packages("com.~~~packagesPath")
                .persistenceUnit("Key 값으로 사용하고싶은 명칭")
                .build();
}

public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
}

서브로 사용할 설정의 경우
@Qualifier("subEntityManagerFactory") 을 사용하여 bean 매칭을 진행해야한다.

@Configuration
@EnableJpaRepositories
@EnableTransactionManagement
class ApplicationConfig {

      @Bean(name="subDataSource")
      public DataSource dataSource() {

        EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
        return builder.setType(EmbeddedDatabaseType.HSQL).build();
      }

      @Bean(name="subEntityManagerFactory")
      public LocalContainerEntityManagerFactoryBean entityManagerFactory(
            EntityManagerFactoryBuilder builder,
            @Qualifier("subDataSource") DataSource dataSource) {
        return builder
                .dataSource(dataSource)
                .packages("com.~~~packagesPath")
                .persistenceUnit("Key 값으로 사용하고싶은 명칭")
                .build();
    }

    public PlatformTransactionManager transactionManager(
            @Qualifier("subEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }
}
반응형