back-end/spring boot

다중 데이터베이스 사용하기

study-minjeong 2024. 7. 15. 15:11

하나의 데이터베이스를 사용할 때는 application.properties 또는 application.yml에 설정을 해주면 바로 db 세팅을 해주지만 다중 db를 사용할 때는 직접 설정해주어야한다.

 

 

1. application.properties 또는 application.yml에 기본 설정해주기

spring.datasource.url = jdbc:mysql://localhost:33061/shop_db
spring.datasource.driverClassName = com.mysql.cj.jdbc.Driver
spring.datasource.username = root
spring.datasource.password = pw

spring.second-datasource.url = jdbc:mysql://localhost:33061/community_db
spring.second-datasource.driverClassName = com.mysql.cj.jdbc.Driver
spring.second-datasource.username = root
spring.second-datasource.password = pw

 

 

2. Datasource

두개의 datasource를 각각 설정해준다. 다중 db를 사용할 때는 각 db마다 설정을 해줘야하고, 첫번째 DB 설정 클래스 안에 있는 Bean들에는 @Primary를 붙여줘야한다.

- @Primary : 설정간의 충돌을 막아주고, 우선 주입시켜줌 

 

datasource 설정 방법은 아래의 글에 작성해두었다!

2024.07.11 - [spring boot] - DataSource 설정 예제

 

DataSource 설정 예제

DataSource커넥션을 획득하는 방법을 추상화 한 인터페이스이다.public interface DataSource { Connection getConnection() throws SQLException;} DataSource에 설정해 준 메타 데이터들을 토대로 DB와의 Connection을 생성하

study-minjeong.tistory.com

 

 

 

3. 그 외의 필요한 Bean 등록

>> 설정 파일에 DataSource 설정, EntityManagerFactory, TransactionManager 설정이 다 되어 있으면, 이 과정은 안해도 되는 듯?

 

@Configuration
public class AppConfig {
   /* JPA 관련 설정 */
   @PersistenceContext(unitName = "primaryEntityManager")
   private EntityManager primaryEntityManager;
   
   @PersistenceContext(unitName = "secondEntityManager")
   private EntityManager secondEntityManager;
}

등록해준 후 이 Bean들을 필요한 곳에서 사용하면 된다.

 

 

 

아래는 테스트 해본 결과~~

오류가 뜬다....

오류 정리한 내용들...

2024.07.16 - [back-end/spring boot] - [오류] Invalid bound statement (not found)

2024.07.16 - [back-end/spring boot] - [오류] 다중 데이터베이스 설정을 각각 했는데 같은 설정값이 적용된 경우