개발/10줄 TIL

210831 10줄 TIL

냐냐_ 2021. 9. 1. 11:22

[ 다중 데이터소스 사용 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