728x90
SpringBoot에서 1개의 Datasource 만 사용할 경우 application.yml 파일에 datasource 만 작성하면 Spring 이 알아서 맵핑을 해주지만 2개 이상의 Datasource는 맵핑에 어려움이 있습니다. 따라서 다중 맵핑에는 Config 파일을 추가로 작성하여야 합니다. 아래는 Config 파일을 작성하는 방법입니다.
1. application.yml
server:
port: 1221
servlet:
encoding:
charset: UTF-8
mybatis:
config-location: classpath:config/mybatis-config.xml
spring:
config:
activate:
on-profile: "local"
datasource:
oracle:
driver-class-name: oracle.jdbc.driver.OracleDriver
jdbcUrl: jdbc:oracle:thin:@localhost:65022/xe
username: system
password: root
mariadb:
driver-class-name: org.mariadb.jdbc.Driver
jdbcUrl: jdbc:mariadb://localhost:3306/MYMSG
username: mymsg_cyb
password: q1w2e3r4T%
- 공통적으로 사용할 Mybatis 설정을 작성하고, 각각 "oracle"과 "mariadb"를 작성합니다. 원하시는 이름으로 작성하셔도 됩니다.
2. mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
<setting name="callSettersOnNulls" value="true"/>
<setting name="jdbcTypeForNull" value="NULL"/>
</settings>
</configuration>
- mapUnderscoreToCamelCase: 이 설정은 데이터베이스의 칼럼 이름이 스네이크 케이스(underscore_case)인 경우 해당 칼럼 이름을 자바 객체의 카멜 케이스(camelCase)로 변환할지를 결정합니다.
- callSettersOnNulls: 이 설정은 MyBatis가 NULL 값을 가진 칼럼에 대한 setter 메서드를 호출할지 여부를 결정합니다.
- jdbcTypeForNull: 이 설정은 MyBatis가 NULL 값을 처리할 때 사용할 JDBC 타입을 지정합니다. 이 값이 NULL로 설정되면 MyBatis는 JDBC 드라이버의 기본 NULL 타입을 사용합니다.
3. DataSourceConfig
package com.example.mulitds.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
@Configuration
public class DataSourceConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource.oracle")
public DataSource oracleDataSource(){
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix = "spring.datasource.mariadb")
public DataSource mariadbDataSource() {
return DataSourceBuilder.create().build();
}
}
- application.yml 파일에서 작성하였던 datasource 관련 필드들의 prefix를 지정합니다. 이렇게 되면 메서드명으로 Bean 이 생성이 됩니다. 해당 Bean 은 추후에 맵핑할 때 사용됩니다.
4. OracleMybatusConfig
package com.example.mulitds.config;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.example.mulitds.dao.oracle", sqlSessionFactoryRef = "oracleSqlSessionFactory")
public class OracleMybatisConfig {
@Bean
public SqlSessionFactory oracleSqlSessionFactory(@Qualifier("oracleDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSource);
factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/oracle/*.xml"));
return factoryBean.getObject();
}
}
- MapperScan 으로 @Mapper 파일을 지정하고 @Qualifier를 통해 위에서 작성하였던 DataSource Bean을 맵핑합니다. MariaMyBatisConfig.java 도 같은 방식으로 작성해 줍니다.
5. 호출
package com.example.mulitds.service;
import com.example.mulitds.dao.maria.MariaDAO;
import com.example.mulitds.dao.oracle.OracleDAO;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class MainService {
private final OracleDAO oracleDAO;
private final MariaDAO mariaDAO;
public void getQuery() {
String oraResult = oracleDAO.selectSysdate();
String marResult = mariaDAO.selectNow();
System.out.println("ora : " + oraResult + " / maria : " + marResult);
}
}
- @Mapper 와 쿼리 xml 파일을 잘 작성한 후 @Service에서 해당 mapper를 호출합니다.
전체소스는 Github 를 참고하세요.
감사합니다.
728x90
'프레임워크 > SpringBoot' 카테고리의 다른 글
[SpringBoot] Cookie 사용하기 (0) | 2024.06.03 |
---|---|
[SpringBoot] ErrorController 작성하기(With Thymeleaf) (0) | 2024.05.28 |
[SpringBoot] Test 코드 작성하기(MockMvc) (0) | 2024.05.27 |
[SpringBoot] @LoginCheck 어노테이션 만들기 (0) | 2024.05.23 |
[SpringBoot] JAR 파일 서버 배포 (0) | 2024.05.20 |