동적 데이터소스(Dynamic DataSources)를 사용하여 다중 데이터베이스 연결을 지원하려면 Spring 프레임워크와 함께 MyBatis를 사용하는 것이 일반적입니다. 아래는 Spring과 MyBatis를 함께 사용하여 동적 데이터소스를 구현하는 예제입니다.
예제: 동적 데이터소스 구현
-
Spring과 MyBatis 설정:
먼저 Spring과 MyBatis를 설정합니다. Spring 프레임워크에서 데이터소스 빈을 동적으로 생성할 수 있는
@Configuration
을 사용한 Java 설정 파일을 생성합니다.
@Configuration
@MapperScan(basePackages = "com.example.mappers", sqlSessionFactoryRef = "sqlSessionFactory")
public class DatabaseConfig {
@Primary
@Bean(name = "dataSource1")
@ConfigurationProperties(prefix = "spring.datasource.db1")
public DataSource dataSource1() {
return DataSourceBuilder.create().build();
}
@Bean(name = "dataSource2")
@ConfigurationProperties(prefix = "spring.datasource.db2")
public DataSource dataSource2() {
return DataSourceBuilder.create().build();
}
@Primary
@Bean(name = "sqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(
@Qualifier("dataSource1") DataSource dataSource1,
@Qualifier("dataSource2") DataSource dataSource2) throws Exception {
SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dynamicDataSource(dataSource1, dataSource2));
return sessionFactoryBean.getObject();
}
@Primary
@Bean(name = "transactionManager")
public DataSourceTransactionManager transactionManager(
@Qualifier("dataSource1") DataSource dataSource1,
@Qualifier("dataSource2") DataSource dataSource2) {
return new DataSourceTransactionManager(dynamicDataSource(dataSource1, dataSource2));
}
@Bean(name = "dynamicDataSource")
public DataSource dynamicDataSource(
@Qualifier("dataSource1") DataSource dataSource1,
@Qualifier("dataSource2") DataSource dataSource2) {
Map<Object, Object> targetDataSources = new HashMap<>();
targetDataSources.put("db1", dataSource1);
targetDataSources.put("db2", dataSource2);
DynamicRoutingDataSource dynamicDataSource = new DynamicRoutingDataSource();
dynamicDataSource.setTargetDataSources(targetDataSources);
dynamicDataSource.setDefaultTargetDataSource(dataSource1);
return dynamicDataSource;
}
}`
-
매퍼 인터페이스 작성:
매퍼 인터페이스를 작성하고 SQL 쿼리를 작성합니다.
@Mapper
public interface UserMapper {
@Select("SELECT * FROM users")
List<User> getAllUsers();
}`
-
프로퍼티 파일 설정:
application.properties
파일에 데이터베이스 연결 정보를 설정합니다.
spring.datasource.db1.url=jdbc:mysql://localhost:3306/database1
spring.datasource.db1.username=username1
spring.datasource.db1.password=password1
spring.datasource.db2.url=jdbc:mysql://localhost:3306/database2
spring.datasource.db2.username=username2
spring.datasource.db2.password=password2`
-
Java 코드에서 사용:
동적 데이터소스를 사용하여 데이터베이스에 연결합니다.
public class Main {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(DatabaseConfig.class);
UserMapper userMapper = context.getBean(UserMapper.class);
// 동적 데이터소스를 통해 데이터베이스 작업 수행
List<User> users = userMapper.getAllUsers();
for (User user : users) {
System.out.println("User: " + user);
}
}
}`
위의 예제에서는 Spring과 MyBatis를 사용하여 동적 데이터소스를 설정하고 다중 데이터베이스에 연결하는 방법을 보여줍니다. DatabaseConfig
클래스에서 @Configuration
을 사용하여 동적 데이터소스를 구성하고, application.properties
파일에서 데이터베이스 연결 정보를 설정합니다. Java 코드에서는 Spring의 ApplicationContext
를 사용하여 동적 데이터소스를 주입하고 데이터베이스 작업을 수행합니다.
이 예제는 Spring과 MyBatis를 함께 사용하여 동적 데이터소스를 설정하는 일반적인 방법을 보여줍니다. 데이터베이스의 연결 정보와 데이터베이스 수는 필요에 따라 조정할 수 있습니다.