1. 程式人生 > 實用技巧 >SpringBoot中基於Mybatis多資料來源操作

SpringBoot中基於Mybatis多資料來源操作

在SpringBoot中,基於Mybatis多資料來源操作,需要以下配置:

1、在專案的pom.xml 檔案中配置多個數據庫的連線配置資訊

2、根據資料來源的數量編寫多個數據庫的配置檔案xxxxConfig

匯入的包

import com.alibaba.druid.pool.DruidDataSource;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

  

@Configuration
// 掃描 Mapper 介面並容器管理
@MapperScan(basePackages = MasterDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "masterSqlSessionFactory")
public class MasterDataSourceConfig {
  //精確到 master 目錄,以便跟其他資料來源隔離
  static final String PACKAGE = "com.xxx.xxx.xxx.dao.master";
  static final String MAPPER_LOCATION = "classpath:mapper/master/*.xml";

  @Value("${spring.datasource.master.url}")
  private String url;

  @Value("${spring.datasource.master.username}")
  private String user;

  @Value("${spring.datasource.master.password}")
  private String password;

  @Value("${spring.datasource.master.driver-class-name}")
  private String driverClassName;

  @Bean(name = "masterDataSource")
  @Primary
  public DataSource masterDataSource() {
    DruidDataSource dataSource = new DruidDataSource();
    dataSource.setDriverClassName(driverClassName);
    dataSource.setUrl(url);
    dataSource.setUsername(user);
    dataSource.setPassword(password);
    return dataSource;
  }

  @Bean(name = "masterTransactionManager")
  @Primary
  public DataSourceTransactionManager masterTransactionManager() {
    return new DataSourceTransactionManager(masterDataSource());
  }

  @Bean(name = "masterSqlSessionFactory")
  @Primary
  public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource masterDataSource)
      throws Exception {
    final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
    sessionFactory.setDataSource(masterDataSource);
    sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
        .getResources(MasterDataSourceConfig.MAPPER_LOCATION));
    return sessionFactory.getObject();
  }
}

  

@Configuration
// 掃描 Mapper 介面並容器管理
@MapperScan(basePackages = SecondDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "secondSqlSessionFactory")
public class SecondDataSourceConfig {
  // 精確到 cluster 目錄,以便跟其他資料來源隔離
  static final String PACKAGE = "com.xxx.xxx.xxx.dao.second";
  static final String MAPPER_LOCATION = "classpath:mapper/second/*.xml";

  @Value("${spring.datasource.second.url}")
  private String url;

  @Value("${spring.datasource.second.username}")
  private String user;

  @Value("${spring.datasource.second.password}")
  private String password;

  @Value("${spring.datasource.second.driver-class-name}")
  private String driverClass;

  @Bean(name = "secondDataSource")
  public DataSource clusterDataSource() {
    DruidDataSource dataSource = new DruidDataSource();
    dataSource.setDriverClassName(driverClass);
    dataSource.setUrl(url);
    dataSource.setUsername(user);
    dataSource.setPassword(password);
    return dataSource;
  }

  @Bean(name = "secondTransactionManager")
  public DataSourceTransactionManager clusterTransactionManager() {
    return new DataSourceTransactionManager(clusterDataSource());
  }

  @Bean(name = "secondSqlSessionFactory")
  public SqlSessionFactory clusterSqlSessionFactory(@Qualifier("secondDataSource") DataSource clusterDataSource)
      throws Exception {
    final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
    sessionFactory.setDataSource(clusterDataSource);
    sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
        .getResources(SecondDataSourceConfig.MAPPER_LOCATION));
    return sessionFactory.getObject();
  }
}