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 · 访问量 1459

猜你喜欢

转载自blog.csdn.net/qq_40791070/article/details/100661766
今日推荐