Spring/문법

다중 데이터소스 설정 하기 (feat. DB 여러 개 연결하기)

가지코딩 2025. 5. 12. 14:19

 

환경

  • Java 17
  • Spring Boot 3.x
  • MySQL
  • spring-boot-starter-jdbc 사용

1. application.properties 설정

  • 꼭 jdbc-url로 적어야 한다.
    • 단일 DB 쓸 땐 url도 되지만, 다중 설정에서는 오류난다.
# 첫 번째 DB (기본)
spring.datasource.todo.jdbc-url=jdbc:mysql://localhost:3306/todo
spring.datasource.todo.username=root
spring.datasource.todo.password=1234
spring.datasource.todo.driver-class-name=com.mysql.cj.jdbc.Driver

# 두 번째 DB
spring.datasource.todo-v2.jdbc-url=jdbc:mysql://localhost:3306/todoV2
spring.datasource.todo-v2.username=root
spring.datasource.todo-v2.password=1234
spring.datasource.todo-v2.driver-class-name=com.mysql.cj.jdbc.Driver

 


2. DataSourceConfig 설정

@Configuration
public class DataSourceConfig {
    // 기존 DB
    @Primary
    @Bean(name = "todoDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.todo")
    public DataSource todoDataSource() {
        return DataSourceBuilder.create().build();
    }
	
    // 추가 DB
    @Bean(name = "todoV2DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.todo-v2")
    public DataSource todoV2DataSource() {
        return DataSourceBuilder.create().build();
    }
}

3. Repository에서 사용 예시

  • @Qualifier 어노테이션 사용
    • 사용할 DataSource 객체를 선택할 수 있다.
  • @Primary 로 설정한 객체는 default 로 사용할 수 있다.
@Repository
public class AuthorRepositoryImpl implements AuthorRepository {
    private final JdbcTemplate jdbcTemplate;

    public AuthorRepositoryImpl(@Qualifier("todoV2DataSource") DataSource dataSource) {
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }
}