springboot,配置,多數據源

在作項目的過程當中不免會遇到這種狀況:一個項目須要兩個數據庫中的數據,但願這篇文章能給遇到這些問題的小夥伴一點幫助
java

第一步:將兩個數據源的mapper接口和xml文件分別放入不一樣的文件夾下;mysql

第二步:在application.yml文件中加入雙數據源,必定要指定主數據源,否則會報錯
spring

spring:
  datasource:
    primary:
      driver-class-name: com.mysql.jdbc.Driver
      url: url地址
      username: 用戶名
      password: 密碼
    secondary:
      driver-class-name: com.mysql.jdbc.Driver
      url: url地址
      username: 用戶名
      password: 密碼

第三步:config類:
sql

@Configuration
@MapperScan(basePackages = "數據源1的mapper路徑:com.dao.mapper.interface1", sqlSessionTemplateRef  = "test1SqlSessionTemplate")
public class DataSource1Config {

    @Bean(name = "test1DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.primary")
    @Primary
    public DataSource testDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "test1SqlSessionFactory")
    @Primary
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("test1DataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/數據源1/*.xml"));//指定mapper.xml路徑
        return bean.getObject();
    }

    @Bean(name = "test1TransactionManager")
    @Primary
    public DataSourceTransactionManager testTransactionManager(@Qualifier("test1DataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "test1SqlSessionTemplate")
    @Primary
    public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}
@Configuration
@MapperScan(basePackages = "數據源2的mapper路徑:com.dao.mapper.interface2", sqlSessionTemplateRef  = "test2SqlSessionTemplate")
public class DataSource2Config {

    @Bean(name = "test2DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.secondary")
    public DataSource testDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "test2SqlSessionFactory")
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("test2DataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/數據源2/*.xml"));//指定mapper.xml路徑
        return bean.getObject();
    }

    @Bean(name = "test2TransactionManager")
    public DataSourceTransactionManager testTransactionManager(@Qualifier("test2DataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "test2SqlSessionTemplate")
    public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}

此時,項目是能夠運行起來的,可是MySql有一個問題,就是配置雙數據源後,當鏈接池空閒時間超過8小時,數據庫鏈接就會自動斷掉,爲了不這種狀況,還須要在yml文件下加入以下配置:
數據庫

datasource:
    primary:
        max-idle: 10
        max-wait: 10000
        min-idle: 5
        initial-size: 5
        validation-query: SELECT 1
        test-on-borrow: false
        test-while-idle: true
        time-between-eviction-runs-millis: 18800 #就是這句話
    secondary:
              max-idle: 10
              max-wait: 10000
              min-idle: 5
              initial-size: 5
              validation-query: SELECT 1
              test-on-borrow: false
              test-while-idle: true
              time-between-eviction-runs-millis: 18800 #就是這句話

目前配置雙數據源已經完成了。mybatis

固然,上面的配置是針對使用默認數據源的配置,可是還有不少童鞋使用了阿里的druid數據源,兩種原理基本相同,只是稍做改動:app

spring:
  datasource:
   druid: 
    primary:
      driver-class-name: com.mysql.jdbc.Driver
      url: url地址
      username: 用戶名
      password: 密碼
    secondary:
      driver-class-name: com.mysql.jdbc.Driver
      url: url地址
      username: 用戶名
      password: 密碼

在config中做以下修改:ide

將 DataSourceBuilder 改成 DuridDataSourceBuilderui

相關文章
相關標籤/搜索