🩸 삽질의 추억
[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