1. 程式人生 > 其它 >淺析SpringBoot多資料來源配置

淺析SpringBoot多資料來源配置

一、多資料來源配置

1、首先是配置檔案

  這裡採用yml配置檔案,其他型別配置檔案同理。

  這裡配置了兩個資料來源,一個名字叫ds1資料來源,一個名字叫ds2資料來源,如果你想配置更多的資料來源,繼續加就行了

spring:
 # 資料來源配置
  datasource:
    ds1: #資料來源1
      driver-class-name: com.mysql.jdbc.Driver # mysql的驅動你可以配置別的關係型資料庫
      url: jdbc:mysql://ip:3306/db1 #資料來源地址
      username: root # 使用者名稱
      password: root # 密碼
    ds2: # 資料來源2
      driver
-class-name: com.mysql.jdbc.Driver # mysql的驅動你可以配置別的關係型資料庫 url: jdbc:mysql://ip:3307/db2#資料來源地址 username: root # 使用者名稱 password: root # 密碼

2、多資料來源配置

  增加一個Springboot的配置類

/**
 * 多資料來源配置
 */
@Configuration
public class DataSourceConfig {

    //主資料來源配置 ds1資料來源
    @Primary
    @Bean(name = "
ds1DataSourceProperties") @ConfigurationProperties(prefix = "spring.datasource.ds1") public DataSourceProperties ds1DataSourceProperties() { return new DataSourceProperties(); } //主資料來源 ds1資料來源 @Primary @Bean(name = "ds1DataSource") public DataSource ds1DataSource(@Qualifier("
ds1DataSourceProperties") DataSourceProperties dataSourceProperties) { return dataSourceProperties.initializeDataSourceBuilder().build(); } //第二個ds2資料來源配置 @Bean(name = "ds2DataSourceProperties") @ConfigurationProperties(prefix = "spring.datasource.ds2") public DataSourceProperties ds2DataSourceProperties() { return new DataSourceProperties(); } //第二個ds2資料來源 @Bean("ds2DataSource") public DataSource ds2DataSource(@Qualifier("ds2DataSourceProperties") DataSourceProperties dataSourceProperties) { return dataSourceProperties.initializeDataSourceBuilder().build(); } }

3、mybatis 多資料來源配置

  增加一個SpringBoot配置類。

  mybatis多資料來源的原理是根據不同包,呼叫不同的資料來源,你只需要把你的mapper.java和mapper.xml(即dao.java和dao.xml)寫在某個package中,springboot自動幫你實現資料來源切換。

  核心程式碼就這句:

@MapperScan(basePackages ="com.web.ds2.**.dao", sqlSessionTemplateRef = "ds2SqlSessionTemplate")
// 用來指定包掃描指定sqlSessionTemplateRef

sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:com/web/ds2/**/*.xml"));
// 用來指定mapper.xml的路徑

  詳細配置程式碼如下

/**
 * Mybatis主資料來源ds1配置
 * 多資料來源配置依賴資料來源配置
 * @see  DataSourceConfig
 */
@Configuration
@MapperScan(basePackages ="com.web.ds1.**.dao", sqlSessionTemplateRef  = "ds1SqlSessionTemplate")
public class MybatisPlusConfig4ds1 {

    //主資料來源 ds1資料來源
    @Primary
    @Bean("ds1SqlSessionFactory")
    public SqlSessionFactory ds1SqlSessionFactory(@Qualifier("ds1DataSource") DataSource dataSource) throws Exception {
        MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
        sqlSessionFactory.setDataSource(dataSource);
        sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().
                        getResources("classpath*:com/web/ds1/**/*.xml"));  
        return sqlSessionFactory.getObject();
    }

    @Primary
    @Bean(name = "ds1TransactionManager")
    public DataSourceTransactionManager ds1TransactionManager(@Qualifier("ds1DataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Primary
    @Bean(name = "ds1SqlSessionTemplate")
    public SqlSessionTemplate ds1SqlSessionTemplate(@Qualifier("ds1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}
/**
 * Mybatis  第二個ds2資料來源配置
 * 多資料來源配置依賴資料來源配置
 * @see  DataSourceConfig
 */
@Configuration
@MapperScan(basePackages ="com.web.ds2.**.dao", sqlSessionTemplateRef  = "ds2SqlSessionTemplate")
public class MybatisPlusConfig4ds2 {

    //ds2資料來源
    @Bean("ds2SqlSessionFactory")
    public SqlSessionFactory ds2SqlSessionFactory(@Qualifier("ds2DataSource") DataSource dataSource) throws Exception {
        MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
        sqlSessionFactory.setDataSource(dataSource);
        sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().
                getResources("classpath*:com/web/ds2/**/*.xml"));
        return sqlSessionFactory.getObject();
    }

  //事務支援
    @Bean(name = "ds2TransactionManager")
    public DataSourceTransactionManager ds2TransactionManager(@Qualifier("ds2DataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "ds2SqlSessionTemplate")
    public SqlSessionTemplate ds2SqlSessionTemplate(@Qualifier("ds2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}

  其他還有:JdbcTemplate多資料來源配置、mybatis-plus 多資料來源配置,可以見這篇部落格:https://www.jianshu.com/p/dfd5ae340011