728x90
스프링 프로젝트에서 Datasource 여러 개 사용하기
같은 DB를 사용 중이지만, 프로젝트 별로 다른 Datasource를 두기로 결정했다.
Datasource 이름은 편의상 ProjectA, ProjectB로 두었다
1. context-datasource.xml
▼(기존) context-datasource.xml 파일
<bean id="dataSourceSpied" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://(url주소생략)"/>
<property name="username" value="(유저이름)"/>
<property name="password" value="(비밀번호)"/>
<property name="validationQuery" value="select 1"/>
</bean>
<bean id="dataSource" class="net.sf.log4jdbc.Log4jdbcProxyDataSource">
<constructor-arg ref="dataSourceSpied" />
<property name="logFormatter">
<bean class="net.sf.log4jdbc.tools.Log4JdbcCustomFormatter">
<property name="loggingType" value="MULTI_LINE" />
<property name="sqlPrefix" value="SQL : "/>
</bean>
</property>
</bean>
▼ (수정) context-datasource.xml 파일
기존 내용 수정 + 새로운 데이터베이스에 대한 설정을 추가로 해주었다.
<!-- MySQL ProjectA 설정 -->
<bean id="ProjectASpied" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://(아이피주소:포트번호 생략)/projectA?(뒤 설정 생략)"/>
<property name="username" value="(유저이름)"/>
<property name="password" value="(비밀번호)"/>
<property name="validationQuery" value="select 1"/>
</bean>
<bean id="ProjectA" class="net.sf.log4jdbc.Log4jdbcProxyDataSource">
<constructor-arg ref="ProjectASpied" />
<property name="logFormatter">
<bean class="net.sf.log4jdbc.tools.Log4JdbcCustomFormatter">
<property name="loggingType" value="MULTI_LINE" />
<property name="sqlPrefix" value="SQL : "/>
</bean>
</property>
</bean>
<!-- MySQL ProjectB 설정 -->
<bean id="ProjectBSpied" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://(아이피주소:포트번호 생략)/projectB?(뒤 설정 생략)"/>
<property name="username" value="(유저이름)"/>
<property name="password" value="(비밀번호)"/>
<property name="validationQuery" value="select 1"/>
</bean>
<bean id="ProjectB" class="net.sf.log4jdbc.Log4jdbcProxyDataSource">
<constructor-arg ref="ProjectBSpied" />
<property name="logFormatter">
<bean class="net.sf.log4jdbc.tools.Log4JdbcCustomFormatter">
<property name="loggingType" value="MULTI_LINE" />
<property name="sqlPrefix" value="SQL : "/>
</bean>
</property>
</bean>
2. context-mapper.xml
▼(기존) context-mapper.xml 파일
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:/mapper/**/*_SQL.xml" />
</bean>
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSession"/>
</bean>
▼(수정) context-mapper.xml 파일
<bean id="projectASession" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="projectA" />
<property name="mapperLocations" value="classpath:/mapper/**/*_SQL.xml" />
</bean>
<bean id="projectASessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="projectASession"/>
</bean>
<bean id="projectBSession" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="projectB" />
<property name="mapperLocations" value="classpath:/mapper/**/*_SQL.xml" />
</bean>
<bean id="projectBSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="projectBSession"/>
</bean>
3. 기존 DAO 수정
프로젝트 내 모든 DAO는 AbstractDAO를 상속받는 상태였으므로 AbstractDAO를 수정해 주었다.
기존의 datasource와 구분을 두기 위해 경로를 추가하기.
@Qualifiler("projectASessionTemplete")
4. 새 DAO 추가
@Qualifiler("projectBSessionTemplete")
새로운 datasource를 사용할 DAO 파일을 만들어준다.
기존 DAO와 마찬가지로 구분하기 위해 새로운 DAO 파일에는 @Qualifiler("projectBSessionTemplete")를 추가했다.
728x90
5. DAO 파일 적용하기
extends newDAO
데이터베이스 ProjectA 관련한 파일일 경우 AbstractDAO (기존 파일)을 상속받게 했고
새로 만든 ProjectB 관련한 파일일 경우 새로 만든 DAO파일을 상속받게 해서 사용하면
한 프로젝트 내에서도 다중 데이터베이스가 가능해진다!
300x250
'CODING > 🍃Spring & Spring Boot' 카테고리의 다른 글
[Spring] DB 엑셀 다운로드 기능 구현하기 (0) | 2024.01.22 |
---|---|
[Spring boot] 스프링부트 환경설정하기 (0) | 2024.01.11 |
[Spring] 검색 기능 구현하기 (0) | 2023.12.07 |
[Spring] 스프링 주요 어노테이션 정리 (0) | 2023.11.06 |
[Spring] 파라미터 존재 여부 확인하기 (0) | 2023.09.13 |