springboot 多数据原配置(双数据源案例)

519 阅读1分钟

第一步:配置数据源配置

spring:
  datasource:
  # 数据源1
    mydb1:
      driverClassName: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost/my_test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&noAccessToProcedureBodies=true&useAffectedRows=true
      username: root
      password: root
   # 数据源2
    mydb2:
      driverClassName: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost2/my_test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&noAccessToProcedureBodies=true&useAffectedRows=true
      username: root
      password: root
      
  # 设置mybatis
  mybatis:
    mapper-locations: classpath:mapper/*/*.xml

第二步:配置数据源config

数据配置类1:


@Configuration
@MapperScan(basePackages = {"com.xxxxxx.marketingcenter.dal.dao.one"} , sqlSessionFactoryRef = "myDB1SqlSessionFactory")
public class MyDBOne {
    @Bean(name = "myDataSourceOne")
    // 下面的注解作用就是从application.properties中读取以这个字符串开头的那些配置,设置为数据源的配置
    @ConfigurationProperties(prefix = "spring.datasource.mydb1")
    @Primary
    public DataSource myDataSourceOne() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "myDB1TransactionManager")
    @Primary
    public DataSourceTransactionManager oneTransactionManager(@Qualifier("myDataSourceOne")DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }


    @Bean(name = "myDB1SqlSessionFactory")
    @Primary
    public SqlSessionFactory oneSqlSessionFactory(@Qualifier("myDataSourceOne") DataSource dataSource)
            throws Exception {
        final SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(dataSource);
        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources("classpath:mapper/one/*.xml"));
        return sessionFactoryBean.getObject();
    }

    @Primary
    @Bean(name = "myDBOneTemplate")
    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("myDB1SqlSessionFactory")
                                                             SqlSessionFactory sqlSessionFactory) {
        SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory);
        return sqlSessionTemplate;
    }
}

数据配置类2:


@Configuration
@MapperScan(basePackages = {"com.xxxxxx.marketingcenter.dal.dao.two"} , sqlSessionFactoryRef = "myDB2SqlSessionFactory")
public class MyDBTwo {
    @Bean(name = "myDataSourceTwo")
    // 下面的注解作用就是从application.properties中读取以这个字符串开头的那些配置,设置为数据源的配置
    @ConfigurationProperties(prefix = "spring.datasource.mydb2")
    @Primary
    public DataSource myDataSourceTwo() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "myDB1TransactionManager")
    @Primary
    public DataSourceTransactionManager twoTransactionManager(@Qualifier("myDataSourceTwo")DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }


    @Bean(name = "myDB2SqlSessionFactory")
    @Primary
    public SqlSessionFactory twoSqlSessionFactory(@Qualifier("myDataSourceTwo") DataSource dataSource)
            throws Exception {
        final SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(dataSource);
        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources("classpath:mapper/two/*.xml"));
        return sessionFactoryBean.getObject();
    }

    @Primary
    @Bean(name = "myDBTwoTemplate")
    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("myDB2SqlSessionFactory")
                                                             SqlSessionFactory sqlSessionFactory) {
        SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory);
        return sqlSessionTemplate;
    }
}

image.png

image.png