天天看點

Springboot項目整合MyBatis配置多資料源Springboot項目整合MyBatis配置多資料源

Springboot項目整合MyBatis配置多資料源

描述

在項目開發過程中,在實際的業務中總會遇到這樣的問題,需要通路不同的資料源來完成資料的轉移或者資料的分開處理,這個時候我們可能就需要用到在一個項目中配置多個資料源;接下來要說的是MyBatis所對應的多資料源配置的詳細操作。

準備工作

項目中必須包含以下包引用(版本根據項目實際情況定):

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <scope>runtime</scope>
</dependency>
<dependency>
  <groupId>org.mybatis.spring.boot</groupId>
  <artifactId>mybatis-spring-boot-starter</artifactId>
  <optional>true</optional>
</dependency>

           

項目過程

項目中使用的是application.yml檔案來完成配置資訊的,配置如下:

test:
  datasource:
    db1:
      username: root
      password: 123456
      driver-class-name: com.mysql.jdbc.Driver
      jdbc-url: jdbc:mysql://saas.database:3306/test_one
    db2:
      username: root
      password: 123456
      driver-class-name: com.mysql.jdbc.Driver
      jdbc-url: jdbc:mysql://saas.database:3306/test_two

           

資料源類編寫詳情如下:

DB1:

@Configuration
@MapperScan(value = "tech.test.eaglehorn.mapper.db1", sqlSessionFactoryRef = "sqlSessionFactoryOne")
public class ThirdPartMybatisConfig {

    @Bean
    @ConfigurationProperties(prefix = "thirdpart.datasource.db1")
    public DataSource dataSourceOne() {
        return DataSourceBuilder.create().type(HikariDataSource.class).build();
    }


    @Bean
    public SqlSessionFactory sqlSessionFactoryOne(@Qualifier("dataSourceOne") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(
                "classpath*:sqlmapper/db1/*.xml"
        ));
        return sqlSessionFactoryBean.getObject();
    }

}

           

DB2:

@Configuration
@Slf4j
@MapperScan(value = "tech.test.eaglehorn.mapper.db2", sqlSessionFactoryRef = "sqlSessionFactoryTwo")
public class GateWayMybatisConfig {

    @Bean
    @ConfigurationProperties(prefix = "thirdpart.datasource.db2")
    public DataSource dataSourceTwo() {
        return DataSourceBuilder.create().type(HikariDataSource.class).build();
    }


    @Bean
    public SqlSessionFactory sqlSessionFactoryTwo(@Qualifier("dataSourceTwo") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(
                "classpath*:sqlmapper/db2/*.xml"
        ));
        return sqlSessionFactoryBean.getObject();
    }
}

           

@MapperScan注解參數中,value的值是目前資料源所對應的Mapper接口所在的包路徑,sqlSessionFactoryRef的值是目前類中聲明的SqlSessionFactory Bean

聲明資料源bean上方上的@ConfigurationProperties(prefix = “thirdpart.datasource.db”)是項目配置中的所有資訊注入;

PathMatchingResourcePatternResolver().getResources(

“classpath*:sqlmapper/db2/*.xml”

)); 這個路徑是xml檔案的儲存路徑。

總結

springboot在項目建構的過程中其實已經幫我們做了很多事情了,我們按照規定簡單地做一些配置,就能滿足我們基本的restful API操作資料的整個鍊路,完成以上的配置,将對應的mapper接口放入響應的包下,映射檔案放入響應的配置目錄下,然後啟動項目,就可以直接寫操作資料的代碼邏輯了

有疑問可以評論,看到了基本上會回複

繼續閱讀