SpringBoot使用mybatis-plus配置多个数据源,实现项目中从两个不同的数据库读取数据

SpringBoot使用mybatis-plus配置多个数据源,实现项目中从两个不同的数据库读取数据

1、添加依赖包


    1.8
    2.1.2
    3.4.3
    1.2.13


    mysql
    mysql-connector-java
    runtime


    org.springframework.boot
    spring-boot-starter-jdbc


    org.mybatis.spring.boot
    mybatis-spring-boot-starter
    ${mybatis.version}


    com.baomidou
    mybatis-plus-boot-starter
    ${mybatis.plugin.version}


    com.github.pagehelper
    pagehelper-spring-boot-starter
    ${pagehelper.version}

2、禁止SpringBoot自动配置数据源

在启动类注解上添加exclude参数

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

3、配置文件application.yml添加数据库信息

spring:
  datasource:
    db1:
      type: com.zaxxer.hikari.HikariDataSource
      driverClassName: com.mysql.cj.jdbc.Driver
      jdbcUrl: jdbc:mysql://172.16.253.52:3306/aaa?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=true&serverTimezone=GMT%2B8
      username: root
      password: root
    db2:
      type: com.zaxxer.hikari.HikariDataSource
      driverClassName: com.mysql.cj.jdbc.Driver
      jdbcUrl: jdbc:mysql://172.16.253.55:3306/bbb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=true&serverTimezone=GMT%2B8
      username: root
      password: root

4、代码中配置db1和db2的数据源

新建类DataSourceConfig1

配置MapperLocation路径和MapperScan扫描路径

@Slf4j
@Configuration
@MapperScan(basePackages = "com.demo.mapper.db1.**", sqlSessionFactoryRef = "sqlSessionFactoryDB1")
public class DataSourceConfig1 {
    
    @Primary
    @Bean(name = "dataSourceDB1")
    @ConfigurationProperties(prefix = "spring.datasource.db1")
    public DataSource dataSource() {
        return DataSourceBuilder.create().type(HikariDataSource.class)
                .build();
    }

    @Bean(name = "sqlSessionFactoryDB1")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSourceDB1") DataSource dataSource) throws Exception {
        MybatisSqlSessionFactoryBean sessionFactoryBean = new MybatisSqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(dataSource);
        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources("classpath*:mapper/db1/*.xml"));
        log.info("------dataSource db12 配置成功");
        return sessionFactoryBean.getObject();
    }

    @Bean(name = "sqlSessionTemplateDB1")
    public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("sqlSessionFactoryDB1") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

    @Bean(name = "txManagerDB1")
    public PlatformTransactionManager txManager(@Qualifier("dataSourceDB1") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
}

新建类DataSourceConfig2

@Slf4j
@Configuration
@MapperScan(basePackages = "com.demo.mapper.db2.**", sqlSessionFactoryRef = "sqlSessionFactoryDB2")
public class DataSourceConfig2 {
    
    @Primary
    @Bean(name = "dataSourceDB2")
    @ConfigurationProperties(prefix = "spring.datasource.db2")
    public DataSource dataSource() {
        return DataSourceBuilder.create().type(HikariDataSource.class)
                .build();
    }

    @Bean(name = "sqlSessionFactoryDB2")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSourceDB2") DataSource dataSource) throws Exception {
        MybatisSqlSessionFactoryBean sessionFactoryBean = new MybatisSqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(dataSource);
        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources("classpath*:mapper/db2/*.xml"));
        log.info("------dataSource db2 配置成功");
        return sessionFactoryBean.getObject();
    }

    @Bean(name = "sqlSessionTemplateDB2")
    public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("sqlSessionFactoryDB2") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

    @Bean(name = "txManagerDB2")
    public PlatformTransactionManager txManager(@Qualifier("dataSourceDB2") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
}

至此配置完成

你可能感兴趣的:(SpringBoot使用mybatis-plus配置多个数据源,实现项目中从两个不同的数据库读取数据)