springboot+mybatis+多數據源

所需的依賴

  <!--連接mysql數據庫-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!--鏈接池配置 阿里巴巴連接驅動 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.13</version>
        </dependency>

        <!--引入mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.0</version>
        </dependency>

application.properties配置多數據源連接及連接池

#配置多數據源
spring.datasource.primary.jdbc-url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8 &serverTimezone=Asia/Shanghai
spring.datasource.primary.username=root
spring.datasource.primary.password=root
spring.datasource.primary.driver-class-name=com.mysql.cj.jdbc.Driver


###########################  cbh數據庫   ##########################
#配置多數據源
spring.datasource.secondary.jdbc-url=jdbc:mysql://127.0.0.1:3306/cbh?useUnicode=true&characterEncoding=utf8 &serverTimezone=Asia/Shanghai
spring.datasource.secondary.username=root
spring.datasource.secondary.password=root
spring.datasource.secondary.driver-class-name=com.mysql.cj.jdbc.Driver

#不使用默認的配置源
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.initialSize=2
spring.datasource.minIdle=1
spring.datasource.maxActive=20
spring.datasource.maxWait=60000

配置多數據源的核心配置

連接test主數據庫的配置

@Primary //用於標記主數據源,除了主數據源外,其餘注入文件都不添加該註解
@MapperScan(basePackages = “com.example.demo.dao.primary”, sqlSessionTemplateRef = “PrimarySessionTemplate”) 其中basePackages 表示連接mybatis連接數據庫時,本數據源的作用範圍

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 org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = "com.example.demo.dao.primary", sqlSessionTemplateRef  = "PrimarySessionTemplate")
public class PrimaryDataSourceConfig {

    @Bean(name = "PrimaryDataSource") //作爲一個bean對象並命名
    @ConfigurationProperties(prefix = "spring.datasource.primary") //配置文件中,該數據源的前綴
    @Primary   //用於標記主數據源,除了主數據源外,其餘注入文件都不添加該註解
    public DataSource PrimaryDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "PrimarySessionFactory")
    @Primary
    public SqlSessionFactory PrimarySessionFactory(@Qualifier("PrimaryDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        return bean.getObject();
    }

    @Bean(name = "PrimaryTransactionManager")
    @Primary
    public DataSourceTransactionManager PrimaryTransactionManager(@Qualifier("PrimaryDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

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

}

連接cbh數據庫的配置(從數據庫)

@Configuration
@MapperScan(basePackages = "com.example.demo.dao.secondary", sqlSessionTemplateRef  = "SecondarySessionTemplate")
public class SecondaryDataSourceConfig {
    @Bean(name = "SecondaryDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.secondary")
    //  @Primary
    public DataSource SecondaryDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "SecondarySessionFactory")
    //  @Primary
    public SqlSessionFactory SecondarySessionFactory(@Qualifier("SecondaryDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        return bean.getObject();
    }

    @Bean(name = "SecondaryTransactionManager")
    //   @Primary
    public DataSourceTransactionManager SecondaryTransactionManager(@Qualifier("SecondaryDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "SecondarySessionTemplate")
    //   @Primary
    public SqlSessionTemplate SecondarySessionTemplate(@Qualifier("SecondarySessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

項目結構及項目代碼

在這裏插入圖片描述

mybatis連接數據庫的操作

連接主數據庫的操作

我放在com.example.demo.dao.primary目錄下,連接的是test數據庫

@Repository
public interface TuserDao {
    //查看所有Tuser信息
    @Select("select * from t_user")
    List<Tuser> getListOfTuser();

}

連接次數據庫的操作

我放在com.example.demo.dao.secondary目錄下,連接的是cbh數據庫


@Repository
public interface CBHDao {
    @Select("select id,name,phone,uuid,login_pwd from t_user")
    @Results({
            @Result(column = "login_pwd", property = "pwd")
    })
    List<Tuser> getListOfTuserByCBH();
}

控制層

操作test數據庫

@Autowired
    private TuserService tuserServiceimpl;

    @GetMapping("/test/getListOfTuser")
    public Object getListOfTuser(){
        List<Tuser> list=tuserServiceimpl.getListOfTuser();
        return list;
    }

操作cbh數據庫

@Autowired
    private CBHService cbhServiceimpl;


    @GetMapping("/cbh/getListOfTuserByCBH")
    public Object getListOfTuserByCBH(){
        List<Tuser> list=cbhServiceimpl.getListOfTuserByCBH();
        return "list的記錄數"+list.size();
    }

多數據源結果顯示

連接test數據庫的操作:http://localhost:8080/test/getListOfTuser
在這裏插入圖片描述

連接cbh數據庫的操作:http://localhost:8080/cbh/getListOfTuserByCBH
在這裏插入圖片描述

發佈了15 篇原創文章 · 獲贊 4 · 訪問量 2148
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章