01 springboot--マルチデータソース

4520 ワード

親測は有効で、好きな古い鉄は666をダブルクリックします

プロファイル


DynamicDataSourceConfig.java

/**
*   spring , ,
*/
@Configuration
public class DynamicDataSourceConfig {

    @Bean(name = "test")
    @ConfigurationProperties("spring.datasource.druid.first")
    public DataSource firstDataSource() {
        return DruidDataSourceBuilder.create().build();
    }
    @Bean(name = "ye")
    @ConfigurationProperties("spring.datasource.druid.second")
    public DataSource secondDataSource() {
        return DruidDataSourceBuilder.create().build();
    }
        
        // 。 。
    @Primary
    @Bean
    public DynamicDataSource dataSource() {
        Map targetDataSources = new HashMap();
        targetDataSources.put(DataSourceNames.FIRST, firstDataSource());
        targetDataSources.put(DataSourceNames.SECOND, secondDataSource());

        return new DynamicDataSource(firstDataSource(), targetDataSources);
    }
}

2つのデータ・ソースの構成を次に示します。


データソースプロファイル2:TestMybatisConfig.java

/**
*  @MapperScan  
*  @Qualifier   
*/
@Configuration
@MapperScan(basePackages = {"com.javademos.train.dynamicdatasource.test.mapper"}, sqlSessionFactoryRef = "sqlSessionFactory1",sqlSessionTemplateRef  = "sqlSessionTemplate1")
public class TestMybatisConfig {

    @Autowired
    @Qualifier("test")
    private DataSource test;

    @Bean(name = "sqlSessionFactory1")
    @Primary
    public SqlSessionFactory sqlSessionFactory1() throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(test); //  titan ,  titan 
        factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
        // , xml mybatis  sql 。
        return factoryBean.getObject();

    }
    @Bean(name = "sqlSessionTemplate1")
    @Primary
    public SqlSessionTemplate sqlSessionTemplate1(@Qualifier("sqlSessionFactory1") SqlSessionFactory sqlSessionFactory) throws Exception {
        SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactory); //  Factory
        return template;
    }

    /**
     *  
     * @param
     * @return
     */
    @Bean(name = "test1TransactionManager")
    @Primary
    public PlatformTransactionManager testTransactionManager() {
        return new DataSourceTransactionManager(test);
    }
}

データソースプロファイル2:YeMybatisConfig.java

@Configuration
@MapperScan(basePackages = {"com.javademos.train.dynamicdatasource.ye.mapper"}, sqlSessionFactoryRef = "sqlSessionFactory2",sqlSessionTemplateRef  = "sqlSessionTemplate2")
public class YeMybatisConfig {

    @Autowired
    @Qualifier("ye")
    private DataSource ye;

    @Bean(name = "sqlSessionFactory2")
    public SqlSessionFactory sqlSessionFactory2() throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(ye); //  titan ,  titan 
        factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
        return factoryBean.getObject();
    }
    @Bean(name = "sqlSessionTemplate2")
    public SqlSessionTemplate sqlSessionTemplate2(@Qualifier("sqlSessionFactory2") SqlSessionFactory sqlSessionFactory) throws Exception {
        SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactory); //  Factory
        return template;
    }
    /**
     *  
     * @param
     * @return
     */
    @Bean(name = "test2TransactionManager")
    public PlatformTransactionManager testTransactionManager() {
        return new DataSourceTransactionManager(ye);
    }
}

データソースymlファイル

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driverClassName: com.mysql.jdbc.Driver
    druid:
      first:
        url: jdbc:mysql://localhost:3306/test?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8
        username: root
        password:
      second:
        url: jdbc:mysql://localhost:3306/ye?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8
        username: root
        password:

コードクラウド:https://gitee.com/yedasheng/dynamicdatasource