Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- JAVA Exception 종류
- 도커 로그 확인
- Spring
- mapper annotationo
- 도커 logs
- 자바버그수정
- JpaRepository update
- spring @mapper
- AllArgsConstructor
- doker logs tail
- JPA DB 다중 Connection
- spring mapper
- Vue
- CrudRepository update
- JPA DB Connection 다중
- vuecomponent
- NoArgsConstructor
- @Builder @NoArgsConstructor
- vueslot
- 도커 컨테이너 로그
- docker 로그
- Spring JPA Specification
- repository annotation
- spring JPA DB Connection
- spring JPA DB multi Connection
- spring repository
- spring DB Connection
- spring mapper annotation
- Data Annotation
- Transactions Propagation Option
Archives
- Today
- Total
개발을 잘하고 싶은 개발자
[Spring] JPA DB Connection 다중으로 사용하기! 본문
한 개의 DB Connection만을 사용하던 "나의 Config"에서
다른 DB Connection을 붙여야 하는 미션이 주어졌다.
기존 소스는 아래와 같다.
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
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 org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;
@Configuration
@EnableTransactionManagement
@MapperScan(
basePackages = {"com.test.testapi.mappers"},
sqlSessionFactoryRef = "testDbSqlSessionFactory"
)
public class TestConfig {
@Bean
@ConfigurationProperties(prefix = "test.datasource")
public DataSource testDataSource(){
return DataSourceBuilder.create().build();
}
@Bean
public PlatformTransactionManager testTransactionManager(DataSource dataSource){
return new DataSourceTransactionManager(dataSource);
}
@Bean
public static SqlSessionFactory testDbSqlSessionFactory(DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
return sqlSessionFactoryBean.getObject();
}
}
이제 여기에 새로운 DB Connection을 붙여야 하는데
1. 다른 파일로 빼서 나눌까...? ( NewConfig.java로?)
2. 아래에 @Bean하나를 더 생성해서 붙일까?
선택은 2번. 디비 커넥션이 이제 더 이상 추가되지 않을 거라는... 막연한 확신?
prefix로 나눠 한파일에서 보기 쉽게 정리.
중간에 " @Primary "를 넣어주지 않아 헤매긴 했는데 그래도 뚝딱 해결했다
new로 추가한 다중 DB Connection Config는 아래와 같다.
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
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 org.springframework.context.annotation.Primary;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;
@Configuration
@EnableTransactionManagement
@MapperScan(
basePackages = {"com.logisvalley.portalapi.mappers"},
sqlSessionFactoryRef = "testDbSqlSessionFactory"
)
public class TestConfig {
@Bean
@Primary
@ConfigurationProperties(prefix = "test.datasource")
public DataSource testDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix = "new.datasource")
public DataSource newDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "testTransactionManager")
@Primary
public PlatformTransactionManager testTransactionManager(DataSource dataSource) {
DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
dataSourceTransactionManager.setDataSource(dataSource);
return dataSourceTransactionManager;
}
@Bean(name = "newTransactionManager")
public PlatformTransactionManager newTransactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "testDbSqlSessionFactory")
public static SqlSessionFactory portalDbSqlSessionFactory(DataSource testDataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(testDataSource);
return sqlSessionFactoryBean.getObject();
}
}
디비 연결 성공!

'Backend > spring' 카테고리의 다른 글
[Spring] @Mapper 너는 누구니? (0) | 2021.08.08 |
---|---|
[Spring] @Repository는 언제 쓰나요? (0) | 2021.08.07 |
[Spring JPA] JpaRepository update업데이트 하고 싶지만 save (0) | 2021.08.02 |
[Spring] RESTful 서비스 설계 - Exception 설계한 Response 처리 (0) | 2021.07.24 |
[Spring] DTO, VO, ENTITY 차이를 알고 써보자 (0) | 2021.07.22 |