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...

좋은 웹페이지 즐겨찾기