Springboot mybais 설정 다 중 데이터 원본 프로 세 스 분석

1.하 도 급 방식 의 실현:
1.application.properties 에 두 개의 데이터 베 이 스 를 설정 합 니 다.
\#druid 연결 풀
\#dataSoure One(여 기 는 내 로 컬 데이터 원본)
spring.datasource.one.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.one.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.one.jdbc-url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
spring.datasource.one.username=root
spring.datasource.one.password=root
\#dataSoure Two(여 기 는 우리 서버 의 데이터 원본 입 니 다)
spring.datasource.two.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.two.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.two.jdbc-url=jdbc:mysql://xx.xxx.xx.xxx:3306/kds_master_info?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
spring.datasource.two.username=root
spring.datasource.two.password=KDSmaster123
2.연 결 된 데이터 원본 설정 파일 만 들 기:
아래 DataSource 패키지 가 도입 한 것 은 import javax.activation.Data Source 입 니 다.

@Configuration//   mybatis        
@MapperScan(basePackages = "com.example.mybatis.mapper",sqlSessionFactoryRef = "sqlSessionFactoryOne")
public class DataSourceConfigOne {

  @Bean(name = "dataSourceOne")
  @Primary//              
  //   application.properties              ,prefix       
  @ConfigurationProperties(prefix = "spring.datasource.one")
  public DataSource dataSourceOne() {
    return DataSourceBuilder.create().build();
  }

  @Bean(name = "sqlSessionFactoryOne")
  @Primary
  public SqlSessionFactory sqlSessionFactoryOne(@Qualifier("dataSourceOne") DataSource datasource)throws Exception {
    SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
    bean.setDataSource(datasource);
    bean.setMapperLocations(
        //   mybatis xml    
        new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));    bean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);return bean.getObject();
  }

  @Primary
  public SqlSessionTemplate sqlsessiontemplateOne(@Qualifier("sqlsessiontemplateOne") SqlSessionFactory sessionfactory) {
    return new SqlSessionTemplate(sessionfactory);
  }
}

@Configuration
@MapperScan(basePackages = "com.example.mybatis.mapper2",sqlSessionFactoryRef = "sqlSessionFactoryTwo")
public class DataSourceConfigTwo {
  @Bean(name = "dataSourceTwo")
  //   application.properties              ,prefix       
  @ConfigurationProperties(prefix = "spring.datasource.two")
  public DataSource dataSourceTwo() {
    return DataSourceBuilder.create().build();
  }

  @Bean(name = "sqlSessionFactoryTwo")
  public SqlSessionFactory sqlSessionFactoryTwo(@Qualifier("dataSourceTwo") DataSource datasource)throws Exception {
    SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
    bean.setDataSource((javax.sql.DataSource) datasource);
    bean.setMapperLocations(
        //   mybatis xml    
        new PathMatchingResourcePatternResolver().getResources("classpath:mapper2/*.xml"));    bean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
    return bean.getObject();
  }

  public SqlSessionTemplate sqlsessiontemplateTwo(@Qualifier("sqlsessiontemplateTwo") SqlSessionFactory sessionfactory) {
    return new SqlSessionTemplate(sessionfactory);
  }
}
메모:1.@Primary 라 는 주 해 는 반드시 추가 해 야 합 니 다.추가 하지 않 으 면 spring 은 그 주요 데이터 소스(기본 데이터 소스)2,mapper 의 인터페이스,xml 형식 과 dao 층 을 구분 하지 못 하기 때 문 입 니 다.디 렉 터 리 는 그림 과 같 습 니 다.

3、bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(“XXXX”));mapper 의 xml 형식 파일 위 치 를 설정 해 야 합 니 다.그렇지 않 으 면 오류 가 발생 합 니 다.no statement(이러한 오 류 는 mapper 의 xml 에서 namespace 와 프로젝트 의 경로 가 일치 하지 않 아서 발생 할 수도 있 습 니 다)
4.service 층 에서 서로 다른 업무 에 따라 서로 다른 dao 층 을 주입 합 니 다.


5.프로젝트 를 시작 하고 인 터 페 이 스 를 방문 하면 오류 가 발생 합 니 다.30 분 동안 보고 나 서 야 밑줄 과 낙타 봉 맵 이 실 패 했 습 니 다.이것 은 sqlSession Factory One 과 sqlSession Factory Two 에 bean.getObject().getConfiguration().setMapUnderscore ToCamelCase(true)를 추가 해 야 합 니 다.가능 합 니 다.그리고 계속 방문 하 십시오.Failed to obtain JDBC Connection 을 잘못 보 고 했 습 니 다.nested exception is com.my sql.jdbc.exceptions.jdbc 4.Communications Exception:Communications link failure.나중에 알 아 보 니 위의 데이터베이스 연결 url 에서&useSSL=true 를&useSSL=false 로 변경 해 야 합 니 다.
마지막 으로 테스트 해 보 니 두 데이터베이스 userInfo 와 user 표 의 데이터 가 모두 표시 되 었 습 니 다.
userInfo:

user:

마지막 으로 한 가지 오류 가 있 습 니 다.보충 을 잊 었 습 니 다.여기 서 제 springboot 은 2.x 버 전 입 니 다.하나의 데이터 원본 을 설정 할 때 데이터 베 이 스 를 연결 하 는 url 은 spring.datasource.url=xxx 입 니 다.이렇게 하면 문제 가 없습니다.그러나 다 중 데이터 원본 을 설정 할 때 spring.datasource.one.url 과 spring.datasource.to.url 은 jdbcUrl is required with driver ClassName 을 잘못 보고 합 니 다.spring.datasource.one.url 과 spring.datasource.to.url 의 url 을 spring.datasource.one.jdbc-url 로 바 꾸 면 됩 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기