首页 > 其他分享 >spring boot 配置多套数据源

spring boot 配置多套数据源

时间:2022-12-23 11:01:00浏览次数:36  
标签:mapper jdbc spring 数据源 boot springframework org import

问题:需要在多个数据库中查询数据,不适用sql中的use语句。

导包 pom.xml

<!-- mybatis,使用mybatis-plus也行,虽然plus的单表查询很强,在大部分情况下需要编写复杂繁琐的sql语句,用不上plus -->
<!-- 连接池用mybatis或者spring boot自带的就行。 -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.2</version>
</dependency>
<!-- jdbc,连接的数据库是微软的sql server -->
<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>7.4.1.jre8</version>
    <scope>runtime</scope>
</dependency>

配置数据源 application.yml

spring:
  #数据源
  datasource:
    #url1
    db1:
      jdbc-url: jdbc:sqlserver://192.168.2.1:1433;databasename=TonsOfficeA # 高版本的spring使用jdbc-url,不能使用url
      username: sa
      password: xxx
      driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
    #url2
    db2:
      jdbc-url: jdbc:sqlserver://192.168.100.159:1433;databasename=AgentFlow
      username: sa
      password: xxx
      driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver

配置类 DataSourceConfig1

package com.tons.config;

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.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;

@Configuration
// 扫描com.tons.mapper.db1包下所有@mapper修饰的类,使用db1SqlSessionFactory创建sqlSession(db1SqlSessionFactory使用了db1DataSource作为数据源,并扫描classpath*:mapper/db1/*.xml的mapper.xml文件)
@MapperScan(basePackages = "com.tons.mapper.db1", sqlSessionFactoryRef = "db1SqlSessionFactory")
public class DataSourceConfig1 {

    // 读取application.yml中的配置参数映射成为 db1DataSource
    @Bean("db1DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.db1") 
    public DataSource getDb1DataSource(){
        return DataSourceBuilder.create().build();
    }

    // 配置sql会话工厂
    @Bean("db1SqlSessionFactory")
    public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        // 这里配置mapper文件配置,简单说就 mapper/db1/下面的所有.xml使用db1DataSource做数据源
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/db1/*.xml"));
        return bean.getObject();
    }

    // 配置sql会话模板
    @Bean("db1SqlSessionTemplate")
    public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory){
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

DataSourceConfig2

package com.tons.config;

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.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = "com.tons.mapper.db2", sqlSessionFactoryRef = "db2SqlSessionFactory")
public class DataSourceConfig2 {

    @Bean("db2DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.db2")
    public DataSource getDb1DataSource(){
        return DataSourceBuilder.create().build();
    }

    @Bean("db2SqlSessionFactory")
    public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db2DataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/db2/*.xml"));
        return bean.getObject();
    }

    @Bean("db2SqlSessionTemplate")
    public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db2SqlSessionFactory") SqlSessionFactory sqlSessionFactory){
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

使用就和单数据源一样,mapper接口和mapper.xml文件对应使用即可

标签:mapper,jdbc,spring,数据源,boot,springframework,org,import
From: https://www.cnblogs.com/heirem/p/17000203.html

相关文章

  • Jenkins+Docker 一键自动化部署 SpringBoot 项目
    Jenkins+Docker一键自动化部署SpringBoot项目 本文章实现最简单全面的Jenkins+docker+springboot 一键自动部署项目,步骤齐全,少走坑路。环境:centos7+git(git......
  • WPF中DataGrid控件绑定数据源
     <DataGridIsEnabled="False" ItemsSource="{BindingOpInqueryLine}"x:Name="OperatorWork"CanUserAddRows="False"HorizontalAlignment="Left"Height="312"Marg......
  • 调试内核,bootkernel后没有输出信息
    在uboot加载内核后,只打印了UncompressingLinux...done,bootingthekernel.后面控制台没有任何输出,此时应如何调试?内核在串口没有准备好之前会把打印信息存储在ram中,这......
  • SpringMvc 之异常,前端结合,过滤器
      SpringMvc中出现异常的位置主要有以下地方: 所以在很多地方都会出现异常,所以对于异常,一个集中出来处理,因此要创建异常处理器类,来集中处理异常,其内部是Aop思想,......
  • Java:Spring Boot设置静态资源缓存方案-协商缓存
    版本<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.5</version><rela......
  • Spring IOC源码(五):IOC容器之 beanFactory准备工作
    1、源码解析prepareBeanFactory(beanFactory)是beanFactory的准备工作,主要是对beanFactory的各种属性做填充。 1//beanFactory的准备工作,配置容器上下文,如容......
  • Springboot+Mybatis+MySql下,mysql使用json类型字段存取的处理
    转载:Springboot+Mybatis+MySql下,mysql使用json类型字段存取的处理背景:1、mysql5.7开始支持json类型字段;2、mybatis暂不支持json类型字段的处理,需要自己做处理项目......
  • Spring IOC官方文档学习笔记(三)之依赖项
    1.依赖注入(1)依赖注入(DI)的概念:某个bean的依赖项,由容器来负责注入维护,而非我们自己手动去维护,以此来达到bean之间解耦的目的,如下//情况一:不使用依赖注入publicclass......
  • spring学习总结
    学习完之后感觉spring使用注解开发真的比以前方便了许多1.Spring的出现,是为了高效的完成软件开发,依照软件设计模式的“高内聚低耦合”原则,实现前后端分离,达到不改变原有......
  • springboot学习总结
    刚学完spring的时候就学了一部分的springboot 感觉区别就在于springboot更加的高效 他为了方便开发 在spring的基础上面更加简化了一些配置他有非常大的有点比如:1.......