SpringBoot项目中同时操作多个数据库的实现方法

目录
  • 1、导入相关pom文件
  • 二、application.yml配置文件编写
  • 三、数据库连接配置文件
  • 四、主启动类注解修改
  • 五、测试

在实际项目开发中可能存在需要同时操作两个数据库的场景,比如从A库读取数据,进行操作后往B库中写入数据,此时就需要进行多数据库配置。本文以操作本地和线上的MySQL数据库为例:

1、导入相关pom文件

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.5</version>
</dependency>

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.3</version>
</dependency>

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.7</version>
</dependency>

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

二、application.yml配置文件编写

单数据源的配置如下:

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/meal_order?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
    username: root
    password: root
    type: com.alibaba.druid.pool.DruidDataSource

多数据源的配置如下:

spring:
  datasource:
    dev:
      driver-class-name: com.mysql.cj.jdbc.Driver
      jdbcUrl: jdbc:mysql://xxx.xx.xx.xx:3306/meal_order?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
      username: root
      password: root
      type: com.alibaba.druid.pool.DruidDataSource
    local:
      driver-class-name: com.mysql.cj.jdbc.Driver
      jdbcUrl: jdbc:mysql://127.0.0.1:3306/db2021?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
      username: root
      password: root
      type: com.alibaba.druid.pool.DruidDataSource

经过对比可以发现:
1、多数据源的配置中需要指定具体的名称来区分不同的数据库(上述配置中的dev和local,名称可以根据具体需求自定义)
2、需要使用jdbcUrl代替url

三、数据库连接配置文件

dev数据源配置文件:

@Configuration
@MapperScan(basePackages = "com.multiple.mapper.dev",sqlSessionFactoryRef = "devSqlSessionFactory")
public class DevDataSourceConfig {
    @Primary
    @Bean(name = "devDataSource")
    @ConfigurationProperties("spring.datasource.dev")
    public DataSource masterDataSource(){
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "devSqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("devDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(dataSource);
        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources("classpath:mapping/dev/*.xml"));
        return sessionFactoryBean.getObject();
    }
}

local数据源配置文件:

@Configuration
@MapperScan(basePackages = "com.multiple.mapper.local",sqlSessionFactoryRef = "localSqlSessionFactory")
public class LocalDataSourceConfig {
    @Primary
    @Bean(name = "localDataSource")
    @ConfigurationProperties("spring.datasource.local")
    public DataSource masterDataSource(){
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "localSqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("localDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(dataSource);
        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources("classpath:mapping/local/*.xml"));
        return sessionFactoryBean.getObject();
    }
}

不同配置文件通过@MapperScan注解的内容来区分不同数据库下的mapper文件,通过@ConfigurationProperties注解来加载指定的数据源

以DevDataSourceConfig为例

四、主启动类注解修改

@SpringBootApplication(exclude={<!--{cke_protected}{C}%3C!%2D%2D%20%2D%2D%3E-->DataSourceAutoConfiguration.class})

目录结构如下:

五、测试

从dev库中查询数据,取出字段插入local库中:

public interface DevMapper {
    @Select("select * from test")
    List<Test> getAllTest();
}
public interface LocalMapper {
    @Insert("insert into payment(serial) values (#{name})")
    int insertMessage(String name);
}
@SpringBootTest
class MultipleDatabaseApplicationTests {

    @Autowired
    private DevMapper devMapper;

    @Autowired
    private LocalMapper localMapper;

    @Test
    void contextLoads() {
        List<com.multiple.pojo.Test> testList = devMapper.getAllTest();
        for(com.multiple.pojo.Test test : testList){
            localMapper.insertMessage(test.getAa());
        }
    }
}

运行测试代码,从dev库中查出的数据可以成功添加至local库
该方法也适用需要使用多种不同的数据库的场景,比如MySQL和Oracle,修改数据源配置文件即可

到此这篇关于SpringBoot项目中同时操作多个数据库的实现方法的文章就介绍到这了,更多相关SpringBoot项目操作多个数据库内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • springboot+idea+maven 多模块项目搭建的详细过程(连接数据库进行测试)

    创建之前项目之前 记得改一下 maven  提高下载Pom速度 记得 setting 中要改 maven  改成 阿里云的.具体方法 网上查第一步 搭建parents 项目,为maven项目 ,不为springboot 项目 记得修改groupId 第二步 搭建多个子模块, honor-dao   honor-manager   honor-common记得创建 honor-manager 的时候 要把他的gruopId 改成com.honor.manager 这里爆红的原因是 因为 我做到后面

  • 方便快捷实现springboot 后端配置多个数据源、Mysql数据库

    目录 1)Test1DataSourceConfig.java 2)Test2DataSourceConfig.java 1.修改application.properties 新建 Mapper.实体类 相应的文件夹,将不同数据源的文件保存到对应的文件夹下 # test1 数据库的配置 test1.spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver test1.spring.datasource.jdbc-url=jdbc:m

  • springboot如何连接两个数据库(多个)

    目录 一.启动类 二.application.yml文件 三.创建配置类 四 .结构 五.多数据源的事物问题 一.启动类 1.启动类需要不用加mybatis的@MapperScan注解 @SpringBootApplication public class AppPush {     public static void main(String[] args) {         SpringApplication.run(AppPush.class,args);     } } 二.appli

  • Springboot2.0配置JPA多数据源连接两个mysql数据库方式

    目录 1. 目录结构及配置 2. 配置文件 3. DataSourceConfigurer类 4. 主数据源配置 5. 从数据源配置 6.User实体类模板 7.dao层模板 8.service模板 9.IBaseService接口 1. 目录结构及配置 pom.xml(不要乱放太多,会引起jar冲突,亲身体验) <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://m

  • SpringBoot项目中同时操作多个数据库的实现方法

    目录 1.导入相关pom文件 二.application.yml配置文件编写 三.数据库连接配置文件 四.主启动类注解修改 五.测试 在实际项目开发中可能存在需要同时操作两个数据库的场景,比如从A库读取数据,进行操作后往B库中写入数据,此时就需要进行多数据库配置.本文以操作本地和线上的MySQL数据库为例: 1.导入相关pom文件 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connecto

  • 如何在SpringBoot项目中使用Oracle11g数据库

    在SpringBoot项目中使用Oracle11g数据库 具体步骤如下: 1:下载ojdbc6.jar ,随便放个英文目录位置就好 2:命令行下输入下行,注意最后-Dfile 为自己的下载目录 mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.1.0 -Dpackaging=jar -Dfile=H:\eclpise-workspace\ojdbc6.jar 3:在项目的pom文件

  • SpringBoot项目中控制台日志的保存配置操作

    SpringBoot 控制台日志的保存配置 情景:SpringBoot项目中需要把控制台日志保存下来. 实现方法: 1.在配置文件application-prod.yml 配置如下: logging: config: classpath:logback-spring-prod.xml 2.logback-spring-prod.xml 这个文件是记录控制台打印日志保存的路径配置如下: <?xml version="1.0" encoding="UTF-8"?&

  • SpringBoot项目中的多数据源支持的方法

    1.概述 项目中经常会遇到一个应用需要访问多个数据源的情况,本文介绍在SpringBoot项目中利用SpringDataJpa技术如何支持多个数据库的数据源. 具体的代码参照该 示例项目 2.建立实体类(Entity) 首先,我们创建两个简单的实体类,分别属于两个不同的数据源,用于演示多数据源数据的保存和查询. Test实体类: package com.example.demo.test.data; import javax.persistence.Entity; import javax.pe

  • SpringBoot项目中使用redis缓存的方法步骤

    本文介绍了SpringBoot项目中使用redis缓存的方法步骤,分享给大家,具体如下: Spring Data Redis为我们封装了Redis客户端的各种操作,简化使用. - 当Redis当做数据库或者消息队列来操作时,我们一般使用RedisTemplate来操作 - 当Redis作为缓存使用时,我们可以将它作为Spring Cache的实现,直接通过注解使用 1.概述 在应用中有效的利用redis缓存可以很好的提升系统性能,特别是对于查询操作,可以有效的减少数据库压力. 具体的代码参照该

  • 关于在IDEA中SpringBoot项目中activiti工作流的使用详解

    记录一下工作流的在Springboot中的使用,,顺便写个demo,概念,什么东西的我就不解释了,如有问题欢迎各位大佬指导一下. 1.创建springboot项目后导入依赖 <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter-basic</artifactId> <version>6.0.0</version&

  • Springboot项目中使用redis的配置详解

    程序结构: 一.配置 1. 在pom.xml中添加依赖 pom.xml文件如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=&q

  • Springboot项目中运用vue+ElementUI+echarts前后端交互实现动态圆环图(推荐)

    目录 如何运用vue+echarts前后端交互实现动态饼图 前言 一.环境配置 1.1 安装acharts 1.2 全局引用 二.圆环图前端实现 2.1 先在vue页面添加渲染盒子 2.2 前端逻辑实现部分 2.3 展示(可按自己需求更改前端样式) 三.前后端数据交互实现 3.1 创建数据库 3.2 后台代码的编写 如何运用vue+echarts前后端交互实现动态饼图 前言 我们做项目的时候,常常需要一些统计图来展示我们的数据,作为web开发人员,会实现统计图是我们必会的技能.我将带大家来实现动

  • SpringBoot项目中建议关闭Open-EntityManager-in-view原因

    目录 前言 问题背景 OPEN-ENTITYMANAGER-IN-VIEW的前世今生 问题的真实原因 解决方案 建议关闭OPEN-ENTITYMANAGER-IN-VIEW 结语 前言 一天,开发突然找过来说KLock分布式锁失效了,高并发情况下没有锁住请求,导致数据库抛乐观锁的异常.一开始我是不信的,KLock是经过线上大量验证的,怎么会出现这么低级的问题呢?然后,协助开发一起排查了一下午,最后经过不懈努力和一探到底的摸索精神最终查明不是KLock锁的问题,问题出在Spring Data Jp

  • SpringBoot项目中如何实现MySQL读写分离详解

    目录 1.MySQL主从复制 1.1.介绍 二进制日志: MySQL复制过程分成三步: 1.2.主从库搭建 1.2.1.主库配置 1.2.2.从库配置 1.3.坑位介绍 1.3.1.UUID报错 1.3.2.server_id报错 1.3.3.同步异常解决 操作不规范,亲人两行泪…… 2.项目中实现 2.1.ShardingJDBC 2.2.依赖导入 2.3.配置文件 2.4.测试跑路 总结 1.MySQL主从复制 但我们仔细观察我们会发现,当我们的项目都是用的单体数据库时,那么就可能会存在如下

随机推荐