Springboot多數據源控制

 今兒公司要搞個A庫數據遷移到B庫,但是表結構又不一樣,有的數據還要查其他第三方服務。於是就搞了個多數據源DEMO,之前也弄過多數據源,讀寫分離操作使用的,採用AOP自定義註解控制。

spring:
  datasource:
    monit:
      driver-class-name: com.mysql.cj.jdbc.Driver
      jdbc-url: XXX
      username: root
      password: root
    pool:
      driver-class-name: com.mysql.cj.jdbc.Driver
      jdbc-url: XXX
      username: root
      password: root

這兒Springboot可能會報異常, com.mysql.cj.jdbc.Driver要選擇2.1.5以上的Springboot父級,若選用2.0.0.RELEASE就用不了這個。

主要的還是在這兒:

目錄建成這個樣子,然後就是配置代碼了...

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.example.migration.mappers.monit", sqlSessionTemplateRef = "monitSessionTemplate")
public class MonitConfig {
    //將這個對象放入Spring容器中
    @Bean(name = "monitDataSource")
    //表示這個數據源是默認數據源
    @Primary
    // 讀取application.properties中的配置參數映射成爲一個對象
    // prefix表示參數的前綴
    @ConfigurationProperties(prefix = "spring.datasource.monit")
    public DataSource getMonitDataSource() {
        return DataSourceBuilder.create().build();
    }
    @Bean(name = "monitSessionFactory")
    // 表示這個數據源是默認數據源
    @Primary
    //@Qualifier表示查找Spring容器中名字爲test1DataSource的對象
    public SqlSessionFactory monitSessionFactory(@Qualifier("monitDataSource") DataSource datasource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(datasource);
        return bean.getObject();
    }
    @Bean("monitSessionTemplate")
    // 表示這個數據源是默認數據源
    @Primary
    public SqlSessionTemplate monitSessionTemplate(@Qualifier("monitSessionFactory") SqlSessionFactory sessionfactory) {
        return new SqlSessionTemplate(sessionfactory);
    }
}

代碼如上,其他就正常的操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章