1. 程式人生 > 其它 >spring-boot多資料來源配置

spring-boot多資料來源配置

spring-boot多資料來源配置

在config中配置兩個資料來源,配置@MapperScan掃描不同的包

// ConfigDB1
@Configuration
@MapperScan(value = "com.alex.demo.db1.dao",sqlSessionFactoryRef = "db1SqlSessionFactoryBean")
public class ConfigDB1 {
    @Primary // 表示這個資料來源是預設資料來源, 這個註解必須要加,因為不加的話spring將分不清楚那個為主資料來源(預設資料來源)
    @Bean
("db1DataSource") @ConfigurationProperties(prefix = "spring.datasource.db1") //讀取application.yml中的配置引數對映成為一個物件 public DataSource db1DataSource() { return DataSourceBuilder.create().build(); } @Bean("db1SqlSessionFactoryBean") public SqlSessionFactoryBean sqlSessionFactoryBean
(@Qualifier("db1DataSource") DataSource dataSource) throws IOException { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dataSource); ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver
(); sqlSessionFactoryBean.setMapperLocations(resourceResolver.getResources("mybatis/db1/*.xml")); return sqlSessionFactoryBean; } } // ConfigDB2 @Configuration @MapperScan(value = "com.alex.demo.db2.dao",sqlSessionFactoryRef = "db2SqlSessionFactoryBean") public class ConfigDB2 { @Bean("db2DataSource") @ConfigurationProperties(prefix = "spring.datasource.db2") //讀取application.yml中的配置引數對映成為一個物件 public DataSource db2DataSource() { return DataSourceBuilder.create().build(); } @Bean("db2SqlSessionFactoryBean") public SqlSessionFactoryBean sqlSessionFactoryBean(@Qualifier("db2DataSource") DataSource dataSource) throws IOException { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dataSource); ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver(); sqlSessionFactoryBean.setMapperLocations(resourceResolver.getResources("mybatis/db2/*.xml")); return sqlSessionFactoryBean; } }

在spring.properties中新增配置引數

spring:
  datasource:
    db1: # 資料來源1
      jdbc-url: jdbc:mysql://localhost:3310/XA?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8
      username: root
      password: root
      driver-class-name: com.mysql.cj.jdbc.Driver
    db2: # 資料來源2
      jdbc-url: jdbc:mysql://localhost:3320/XA?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8
      username: root
      password: root
      driver-class-name: com.mysql.cj.jdbc.Driver

配置好後注入不同的Mapper代表不同的資料來源

@Service
public class XAService {

    @Resource
    private XADB1Mapper XADB1Mapper;

    @Resource
    private XADB2Mapper XADB2Mapper;

    public void testXA() {
        XADB1 XADB1 = new XADB1();
        XADB1.setId(2);
        XADB1.setName("xa_db1");
        XADB1Mapper.insert(XADB1);

        XADB2 XADB2 = new XADB2();
        XADB2.setId(2);
        XADB2.setName("xa_db2");
        XADB2Mapper.insert(XADB2);

    }
}

原始碼地址 https://gitee.com/kakalex/multiDataSourceDemo