[ 다중 데이터소스 사용 Multiple DataSource ]
DB를 여러 개 사용할 때 데이터소스를 여러개 잡는 방법!
1. DatabaseConfig.java 파일을 DB 수만큼 만들기
(진행중인 플젝은 'Develop' @Profile이 걸려 있어서
그 부분까지 처리하느라 많아졌는데,
PlfmDatabaseConfig.java, PrscDatabaseConfig.java 두 개가 골자다.)
2. 각각의 DatabaseConfig.java 안에
①DataSource ②TransactionManager ③SqlSessonFactory 를 만들어준다.
나중에 구분하기 위해 각 DB별 @Bean의 이름을 설정해주고,
메인이 되는 DB에는 @Primary를 붙여주어야 혼선이 없다
@Profile("staging")
@Bean(name = "prscDatasource")
@Primary
public DataSource customDataSourceStaging() throws Exception {
...
}
@Profile("develop")
@Bean(name = "plfmDatasource")
public DataSource customDataSourceDevelop() throws Exception { }
- staging을 @Primary로 잡고, develop은 잡지 않았다
@Bean(name = "plfmTransaction")
public PlatformTransactionManager plfmTransactionManager(DataSource plfmDataSource) {
return new DataSourceTransactionManager(plfmDataSource);
}
@Bean(name = "plfmSessionfactory")
public SqlSessionFactoryBean plfmSqlSessionFactory(DataSource plfmDataSource) throws IOException {
...
}
- 이렇게 TransactionManager, SqlSessionFactoryBean도 각각 만든다.
3. 각 Config 클래스에 @MapperScan 설정을 걸어준다.
@Configuration
@MapperScan(value="프로젝트경로.plfmmapper.test", sqlSessionFactoryRef="plfmSessionfactory")
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
@ConfigurationProperties(prefix = "spring.plfmdatasource")
@EnableTransactionManagement
public class PlfmDatabaseConfig {
}
- @MapperScan을 제외하고는 기존에 단일DB일 때도 있던 설정이다
value에 각 DB가 담당할 mapper 디렉토리 경로를 잡아주고,
어떤 SqlSessionFactory를 사용할지 정해준다 (위 2.에서 설정해준 이름)
짧게 줄여보고 싶었는데 10줄이 넘네!
줄바꿈 없으면 10줄인 걸로 (??)
'개발 > 10줄 TIL' 카테고리의 다른 글
210905 10줄 TIL (0) | 2021.09.06 |
---|---|
210901 10줄 TIL (0) | 2021.09.02 |
210830 10줄 TIL (0) | 2021.08.31 |
210826 10줄 TIL (0) | 2021.08.27 |