Spring Mabatis 다 중 데이터 원본 설정
6549 단어 spring
기초 환경
Spring boot 2.1.1.RELEASE
Mybatis 1.3.1
HikariCP 3.1.0
pom 파일
1.8
org.springframework.boot
spring-boot-starter-web
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.1.1
com.zaxxer
HikariCP
3.1.0
javax.inject
javax.inject
1
mysql
mysql-connector-java
runtime
org.springframework.boot
spring-boot-starter-test
test
주요 구성
1 application.properties
spring.datasource.primary.jdbc-url=url1
spring.datasource.primary.username=usr1
spring.datasource.primary.password=pw1
spring.datasource.schema.jdbc-url=url2
spring.datasource.schema.username=usr2
spring.datasource.schema.password=pw2
다 중 데이터 원본 을 설정 할 때 url 의 key 는 jdbc-url 로 설정 해 야 합 니 다.
2 데이터베이스 연결 탱크 설정 클래스
DatabaseConfiguration.java 는 서로 다른 url 연결 탱크 의 실례 화 를 사용 합 니 다
@Configuration
public class DatabaseConfiguration {
public static final String PRIMARY_DATASOURCE = "PriDS";
public static final String METADATA_DATASOURCE = "MetaDS";
@Bean(name = PRIMARY_DATASOURCE, destroyMethod = "")
@ConfigurationProperties(prefix = "spring.datasource.primary")
@Primary
public DataSource dataSourcePrimary(){
return new HikariDataSource();
}
@Bean(name = METADATA_DATASOURCE, destroyMethod = "")
@ConfigurationProperties(prefix = "spring.datasource.schema")
public DataSource dataSourceMetadata(){
return new HikariDataSource();
}
}
3 Mybatis mapper bean 설정 클래스 만 들 기
MyBatisConfiguration.java
@Configuration
@MapperScan("com.example.multiDatasourceDemo.mapper")
public class MyBatisConfiguration {
public static final String PRIMARY_SESSION_FACTORY = "primarySessionFactory";
public static final String METADATA_SESSION_FACTORY = "metadataSessionFactory";
/*primary datasource factory bean,use @MapperScan for creating mapper bean */
@Bean(name = PRIMARY_SESSION_FACTORY)
@Primary
public SqlSessionFactoryBean primarySqlSessionFactory(
@Named(DatabaseConfiguration.PRIMARY_DATASOURCE)final DataSource primaryDataSource) throws Exception{
final SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(primaryDataSource);
VFS.addImplClass(SpringBootVFS.class);
PathMatchingResourcePatternResolver pathM3R = new PathMatchingResourcePatternResolver();
sqlSessionFactoryBean.setMapperLocations(pathM3R.getResources("classpath:mapper/**/*Mapper.xml"));
sqlSessionFactoryBean.setTypeAliasesPackage("com.example.multiDatasourceDemo.domain");
SqlSessionFactory sqlSessionFactory;
sqlSessionFactory = sqlSessionFactoryBean.getObject();
return sqlSessionFactoryBean;
}
/*another datasource factory bean*/
@Bean(name = METADATA_SESSION_FACTORY)
public SqlSessionFactoryBean metaSqlSessionFactory(
@Named(DatabaseConfiguration.METADATA_DATASOURCE) final DataSource anotherDataSource) throws Exception {
final SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(anotherDataSource);
VFS.addImplClass(SpringBootVFS.class);
PathMatchingResourcePatternResolver pathM3R = new PathMatchingResourcePatternResolver();
sqlSessionFactoryBean.setMapperLocations(pathM3R.getResources("classpath:anothermapper/anotherMapper.xml"));
sqlSessionFactoryBean.setTypeAliasesPackage("com.example.multiDatasourceDemo.domain");
final SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBean.getObject();
return sqlSessionFactoryBean;
}
@Bean
public MapperFactoryBean dbMapper(
@Named(METADATA_SESSION_FACTORY) final SqlSessionFactoryBean sqlSessionFactoryBean) throws Exception {
MapperFactoryBean factoryBean = new MapperFactoryBean<>(AnotherMapper.class);
factoryBean.setSqlSessionFactory(sqlSessionFactoryBean.getObject());
return factoryBean;
}
}
서로 다른 연결 탱크 를 사용 하 는 공장 bean 을 만 드 는 것 은 mapper bean 을 만 드 는 것 입 니 다.그 중에서 primary DataSource 는@MapperScan 주 해 를 사용 하여 mapper class 를 스 캔 하고 스 캔 이 필요 한 mapper class 에@Mapper 주 해 를 추가 합 니 다.프로젝트 에 mapper 수량 이 많은 경우 이 방식 을 사용 하여 수 동 으로 만 든 코드 의 양 을 줄 입 니 다.anotherDataSource 의 실례 화 된 mapper 는 수 동 으로 만 드 는 방식,즉 dbMapper 방법 을 사용 하여 mapper class 를 지정 합 니 다.
또한 sql 이 xml 파일 에 있 으 면 setMapperLocations 를 설정 하고 xml 파일 경 로 를 스 캔 할 내용 으로 설정 해 야 합 니 다.
setTypeAliases Package 는 sql 에서 사용 하 는 resultType 을 매개 변수 클래스 의 패키지 경 로 를 설정 하 는 데 사 용 됩 니 다.설정 후 사용 할 때 클래스 이름 만 쓰 면 됩 니 다.그렇지 않 으 면 완전한 패키지 경로 와 클래스 이름 을 써 야 합 니 다.전체 항목 이 jar 파일 을 포장 한 후 setTypeAliases Package 설정 이 적용 되 지 않 아 일부 클래스 가 검색 되 지 않 습 니 다.VFS.addImplClass(SpringBootVFS.class)설정 을 추가 해 야 합 니 다.
4 인 스 턴 스 사용
상세 한 것 은github의 항목 을 참조 하고 테스트 의 contrller,mapper,sql 과 테스트 사례 를 포함한다.
참조 링크
https://medium.com/@d.lopez.j...
항목 주소
https://github.com/tifazxy/Mu...
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.