🩸 삽질의 추억

[Spring Boot] Multiple DataBases 를 사용하는 환경에서 table이 자동으로 생성되지 않음(ddl-auto)

the0 2024. 4. 20. 14:54
728x90

상황:

 

- Spring boot 3.2.x 사용

- MySQL DB 두개 사용. 다중 데이터베이스 환경

- application.yml 에 작성한 내용:

    hibernate:
      ddl-auto: create (update, create-drop 모두 안됨)

 

- 각 DBConfig 마다 적은 내용의 일부

@Bean
    public LocalContainerEntityManagerFactoryBean bankCoreEntityManager() {
        LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
        entityManagerFactoryBean.setDataSource(bankCoreDataSource());
        entityManagerFactoryBean.setPackagesToScan("com.capstone2024.sw.kmu.exchangeservice.domain.bankcore");
        entityManagerFactoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
        return entityManagerFactoryBean;

 

 


해결:

 

 - application.yml 에 적은 hibernate:ddl-auto: 는 삭제한다.

- 각 DB Config 의 LocalContainerEntityMangerFactoryBean 의 내용에

"hibernate.hbm2ddl.auto" 추가

 @Bean
 public LocalContainerEntityManagerFactoryBean bankCoreEntityManager(
            EntityManagerFactoryBuilder builder
    ) {
    	// 이거 추가
        Map<String, Object> properties = new HashMap<>();
        properties.put("hibernate.hbm2ddl.auto", "update");

        return builder
                .dataSource(bankCoreDataSource())
                .packages("com.capstone2024.sw.kmu.exchangeservice.domain.bankcore")
                .persistenceUnit("bankcore")
                .properties(properties)
                .build();
    }

 

spring.jpa.hibernate.ddl-auto= 가 동작하지 않는 이유:  

두 개의 DataSource가 자체 LocalContainerEntityManagerFactoryBeans를 만들고 있기 때문.

LocalContainerEntityManagerFactoryBean을 구성함으로 인해 spring.jpa.hibernate.ddl-auto는 비활성화되기에 해당 property는 직접 구성해야 한다.

 

Builder 로 바꾼 이유는 딱히 없음. 그냥 참고한 자료들이 대부분 builder 로 써서 나도 따라한거임..

 

 

도움이 된 링크 : 

https://stackoverflow.com/questions/28275448/multiple-data-source-and-schema-creation-in-spring-boot


삽질한 이유:

 

아예 몰랐음

728x90