-
Spring - 다중 DB 연결하기Spring/전자정부프레임워크 2024. 12. 23. 15:52반응형
import javax.sql.DataSource; import org.apache.ibatis.session.SqlSessionFactory; 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.context.annotation.ImportResource; import org.springframework.transaction.PlatformTransactionManager; @Configuration @ImportResource("classpath:/egovframework/spring/context-datasource.xml") // XML 파일 로드 @MapperScan( basePackages = "{userpath}", // Oracle 매퍼 경로 sqlSessionFactoryRef = "oracleSqlSessionFactory" ) public class OracleConfig extends WebConfig { @Bean(name = "oracleSqlSessionFactory") public SqlSessionFactory oracleSqlSessionFactory(@Qualifier("oracleDataSource") DataSource oracleDataSource) throws Exception { return createSqlSessionFactory(oracleDataSource, "classpath:/{userpath}/*.xml"); } @Bean(name = "oracleTransactionManager") public PlatformTransactionManager oracleTransactionManager(@Qualifier("oracleDataSource") DataSource oracleDataSource) { return createTransactionManager(oracleDataSource); } }
Oracle 연결 설정
(1) context-datasource.xml 수정
Oracle에 대한 데이터소스를 정의합니다.
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.0.xsd"> <!-- Oracle DataSource --> <bean id="oracleDataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/> <property name="username" value="oracle_user"/> <property name="password" value="oracle_password"/> </bean> </beans>
(2) OracleConfig.java
Oracle DB를 위한 Config 클래스입니다. MapperScan을 통해 매퍼 위치를 지정하고, oracleDataSource를 기반으로 SqlSessionFactory와 트랜잭션 매니저를 생성합니다.
import javax.sql.DataSource; import org.apache.ibatis.session.SqlSessionFactory; 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.context.annotation.ImportResource; import org.springframework.transaction.PlatformTransactionManager; @Configuration @ImportResource("classpath:/egovframework/spring/context-datasource.xml") // XML 파일 로드 @MapperScan( basePackages = "{userpath}", // Oracle 매퍼 경로 sqlSessionFactoryRef = "oracleSqlSessionFactory" ) public class OracleConfig extends WebConfig { @Bean(name = "oracleSqlSessionFactory") public SqlSessionFactory oracleSqlSessionFactory(@Qualifier("oracleDataSource") DataSource oracleDataSource) throws Exception { return createSqlSessionFactory(oracleDataSource, "classpath:/{userpath}/*.xml"); } @Bean(name = "oracleTransactionManager") public PlatformTransactionManager oracleTransactionManager(@Qualifier("oracleDataSource") DataSource oracleDataSource) { return createTransactionManager(oracleDataSource); } }
MariaDB 연결 설정
(1) context-datasource.xml 수정
MariaDB에 대한 데이터소스를 정의합니다
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.0.xsd"> <!-- MariaDB DataSource --> <bean id="mariaDataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="org.mariadb.jdbc.Driver"/> <property name="url" value="jdbc:mariadb://localhost:3307/test"/> <property name="username" value="maria_user"/> <property name="password" value="maria_password"/> </bean> </beans>
(2) MariaConfig.java
MariaDB를 위한 Config 클래스입니다. MapperScan을 통해 매퍼 위치를 지정하고, mariaDataSource를 기반으로 SqlSessionFactory와 트랜잭션 매니저를 생성합니다.
import javax.sql.DataSource; import org.apache.ibatis.session.SqlSessionFactory; 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.context.annotation.ImportResource; import org.springframework.transaction.PlatformTransactionManager; @Configuration @ImportResource("classpath:/egovframework/spring/context-datasource.xml") // XML 파일 로드 @MapperScan( basePackages = "{mapperpath}", // Oracle 매퍼 경로 sqlSessionFactoryRef = "oracleSqlSessionFactory" ) public class OracleConfig extends WebConfig { @Bean(name = "oracleSqlSessionFactory") public SqlSessionFactory oracleSqlSessionFactory(@Qualifier("oracleDataSource") DataSource oracleDataSource) throws Exception { return createSqlSessionFactory(oracleDataSource, "classpath:/{userpath}/*.xml"); } @Bean(name = "oracleTransactionManager") public PlatformTransactionManager oracleTransactionManager(@Qualifier("oracleDataSource") DataSource oracleDataSource) { return createTransactionManager(oracleDataSource); } }
공통 로직(WebConfig.java)
Oracle과 MariaDB 모두에서 공통적으로 사용하는 SqlSessionFactory와 트랜잭션 매니저 생성 로직은 WebConfig 클래스에서 관리합니다.
import javax.sql.DataSource; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; @Configuration public class WebConfig { // 공통 SqlSessionFactory 생성 로직 public SqlSessionFactory createSqlSessionFactory(DataSource dataSource, String mapperLocation) throws Exception { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dataSource); sqlSessionFactoryBean.setMapperLocations( new PathMatchingResourcePatternResolver().getResources(mapperLocation) ); return sqlSessionFactoryBean.getObject(); } // 공통 트랜잭션 매니저 생성 로직 public PlatformTransactionManager createTransactionManager(DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } }
동작 원리
- context-datasource.xml: 데이터베이스 연결 설정을 정의하고 DataSource 빈을 생성합니다.
- Config 클래스: 각 DB에 맞는 SqlSessionFactory와 트랜잭션 매니저를 생성하며, 매퍼 스캔 위치를 설정합니다.
- WebConfig: 공통적으로 사용하는 SqlSessionFactory와 트랜잭션 매니저 생성 로직을 제공합니다.
- MyBatis 매퍼: MapperScan 어노테이션으로 지정된 패키지 경로에서 매퍼 파일을 스캔하여 SQL을 실행합니다.
반응형'Spring > 전자정부프레임워크' 카테고리의 다른 글
Spring - Oracle 스키마별로 분리하여 연결하기 (0) 2024.12.27 Spring - Oracle 데이터베이스 연결 (0) 2024.12.27 Spring - 다중 데이터베이스 설정하기 (MySQL 스키마별 분리) (0) 2024.12.23 Spring - 데이터베이스 연결 시 Config파일 파헤치기 (0) 2024.12.23 Spring - Config파일을 통하여 DB연결 및 흐름도 (0) 2024.12.23