Mybatis配置多数据源(pgsql和mysql)

自定义注解实现多数据源动态切换 自定义注解实现多数据源动态切换1、注册多数据源:2、在spring配置文件中配置这两个数据源3、自定义一个数据源类,继承 org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource 并重写 determineCurrentLookupKey()4、实现数据源持有类DataSourceContextHolder5、自定义注解6、利用AOP实现动态数据源切换7、若方法体上没有注解,则使用默认数据源,如果有以下注解,则使用指定的数据源8 阅读详情

背景

因为项目需要查询其他系统的pg数据库,详细见Spring Boot整合PostgreSQL
由于之前没有pg数据库,且内网没有pg数据库的测试环境,所以参照上文自己部署了一套,并且自己写了一套干净的小demo,实现功能后提交代码到内网环境,环境对接耽误很多时间,最终还是解决了,使用pg数据库一定要注意开放远程登录功能,查询出其他系统的数据了,可是现有的数据库查询却出现了问题了,报错信息是psqlexception-error-relation-table-name-does-not-exist。分析是由于多数据源的问题导致。

问题复盘

数据源配置文件

使用外网自己搭建的pg数据库和原有的mysql数据库进行试验进行问题复现。首先添加新数据源的配置文件:

#原数据源信息
spring.pgsql.datasource.url=jdbc:postgresql://192.168.1.106:5432/testdb
spring.pgsql.datasource.username=postgres
spring.pgsql.datasource.password=pg123
spring.pgsql.datasource.driverClassName=org.postgresql.Driver
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.properties.hibernate.hbm2ddl.auto=update
#新数据源信息
spring.datasource.url=jdbc:mysql://192.168.1.105:3306/jpatest
spring.datasource.username=root
spring.datasource.password=Root1234
spring.datasource.driverClassName=com.mysql.jdbc.Driver

此时没有将配置文件内容读到配置类。

模拟业务接口

//原正常接口
@RequestMapping(value = "/getUser")
    public String get() {
        JSONObject jsonObject = new JSONObject();
        LocalDate date = LocalDate.now();
        System.out.println(date.toString());
        String sql = "select name1,name2,name3,name4,name5,name6 from users where xingqi =?";
        try{
            List o = jdbcTemplate.queryForList(sql, date.toString());
            jsonObject.put("messageCode","0000");
            jsonObject.put("info", o);

        }catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("0021","error");
        }
        return jsonObject.toString();
    }
    //新增接口
 @RequestMapping(value = "/get")
    public String getTest(){
        int id = 1;
        return services.getName(id);
    }

新增接口对应实现(简单实现)

public interface Services {
    String getName(int id);
}
@Service
public class Impl implements Services {
    @Autowired
    private Dao dao;
    @Override
    public String getName(int id) {
        return dao.getName(id);
    }
}
@Service
public interface Dao {
    @Select("select username from jpa_user where userId = #{id}")
    String getName(@Param("id") int id);
}

原配置类

@Configuration
public class DataConfig {
    @Value("${spring.pgsql.datasource.username}")
    private String user;
    @Value("${spring.pgsql.datasource.password}")
    private String pass;
    @Value("${spring.pgsql.datasource.url}")
    private String url;
    @Value("${spring.pgsql.datasource.driverClassName}")
    private String driverClassName;
    @Bean(name = "data_pgsql")
    public DataSource dataSource() {
        return getDruidDataSource(user,pass,url,driverClassName);
    }
     private DruidDataSource getDruidDataSource(String name,String password,String url,String driver){
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setDriverClassName(driver);
        druidDataSource.setUrl(url);
        druidDataSource.setUsername(name);
        druidDataSource.setPassword(password);
        druidDataSource.setInitialSize(1);
        druidDataSource.setMinIdle(1);
        druidDataSource.setMaxActive(20);
        druidDataSource.setMaxWait(60000);
        druidDataSource.setTimeBetweenEvictionRunsMillis(60000);
        druidDataSource.setMinEvictableIdleTimeMillis(300000);
        druidDataSource.setPoolPreparedStatements(true);
        druidDataSource.setMaxPoolPreparedStatementPerConnectionSize(20);
        return druidDataSource;
    }
     @Bean(name = "jdbc_pgsql")
    public JdbcTemplate getJdbcTemplate(@Qualifier("data_pgsql") DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }
 }

项目启动,调用get方法,问题复现:
在这里插入图片描述

解决

分析

在原有配置类中添加新增的数据源配置,并且将其用@Primary修饰,原有数据源配置不变。

编码

@Configuration
public class DataConfig {
    @Value("${spring.pgsql.datasource.username}")
    private String user;
    @Value("${spring.pgsql.datasource.password}")
    private String pass;
    @Value("${spring.pgsql.datasource.url}")
    private String url;
    @Value("${spring.pgsql.datasource.driverClassName}")
    private String driverClassName;

    @Value("${spring.datasource.username}")
    private String user1;
    @Value("${spring.datasource.password}")
    private String pass1;
    @Value("${spring.datasource.url}")
    private String url1;
    @Value("${spring.datasource.driverClassName}")
    private String driverClassName1;

    @Bean(name = "data_pgsql")
    public DataSource dataSource() {
        return getDruidDataSource(user,pass,url,driverClassName);
    }
    @Bean(name = "data_mysql")
    @Qualifier("mysqlDataSource")
    @Primary
    public DataSource mysqlDataSource() {
        return getDruidDataSource(user1,pass1,url1,driverClassName1);
    }
    private DruidDataSource getDruidDataSource(String name,String password,String url,String driver){
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setDriverClassName(driver);
        druidDataSource.setUrl(url);
        druidDataSource.setUsername(name);
        druidDataSource.setPassword(password);
        druidDataSource.setInitialSize(1);
        druidDataSource.setMinIdle(1);
        druidDataSource.setMaxActive(20);
        druidDataSource.setMaxWait(60000);
        druidDataSource.setTimeBetweenEvictionRunsMillis(60000);
        druidDataSource.setMinEvictableIdleTimeMillis(300000);
        druidDataSource.setPoolPreparedStatements(true);
        druidDataSource.setMaxPoolPreparedStatementPerConnectionSize(20);
        return druidDataSource;
    }

    @Bean(name = "jdbc_pgsql")
    public JdbcTemplate getJdbcTemplate(@Qualifier("data_pgsql") DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }

    @Bean(name = "jdbc_mysql")
    public JdbcTemplate getMyJdbcTemplate(@Qualifier("data_mysql") DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }



}

启动验证

在这里插入图片描述

springboot+mybatis+pgsql多数据源配置 springBoot多数据源配置 阅读详情

相关推荐

SpringBoot+Mybatis(Mysql/PostgreSQL)多数据源实战详解

前言 由于项目中需要使用到多个数据库进行数据验证,所以一开始在网上找了很多资料,但是大部分都是有关SpringBoot + JPA的多数据源整合。之后找到了微笑大神的一篇blog,在这里感谢纯洁的微笑大神,记录下个人实战过程的注意点以及相关配置。 预先说明 在整合多数据源时,两个或两个以上,一定得定好一个主数据源,不然会报错,比如:事物方面会报错。 ...

Jason Blog 1724

Spring Mybatis连接pgsql配置步骤

一、实现功能 通过Mybatis实现快速访问后端pgsql、mysql等数据库。 二、具体步骤 1.修改pom.xml,添加mybatis相关依赖 <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-sta...

小蚯蚓的博客 7690

RuoYi-Vue-Plus多数据源配置实战:yml配置与@DS注解详解

多数据源是单体应用连接多个数据库的常见需求,在Spring Boot中通常借助动态数据源组件实现。其核心原理是通过AOP拦截注解,将数据源标识存入上下文,在SQL执行时路由到对应连接,从而让不同业务模块透明访问不同库。该技术能有效分离业务库与报表库、历史库,降低耦合,提升系统扩展性。RuoYi-Vue-Plus作为流行的后台快速开发框架,已内置dynamic-datasource,无需手写路由切面,只需在yml中扩展数据源节点,并在Service方法上标注@DS注解即可完成切换。本文基于RuoYi-Vue-

weixin_32325225的博客 337

AOP自定义注解 环绕通知动态切换数据源

Spring Boot实现自定义注解切换多数据源,在前几天项目的升级的过程中,由于业务原因扩展了三个新的数据库,则编写了 一个自定义注解切换数据源.提示:以下是本篇文章正文内容,下面案例可供参考。

qq_49354230的博客 399

Springboot2+mybatisplus+多数据源更换mysql数据库为pgsql

前提:Springboot2+mybatisplus+多数据源mysql,现在需要把数据源2更换为pgsql。

若水印象博客 1472

ROS中costmap_converter插件的配置与使用

在学习TEB算法的过程中,作者提供了一个插件用于转换代价地图,原始的代价地图是由栅格地图中单元格组成,用于表示障碍物,但单元格占用的计算资源较大,故采用插件将单元格转换成点,线,多边形表示。 插件激活 rospack plugins --attrib=plugin costmap_converter 配置cfg文件 在导航配置文件下,新建costmap_converter_params.yaml #######################################################

weixin_42621524的博客 5903

SpringBoot+Mybatis+多数据源应用

SpringBoot+Mybatis+Mysql+Pgsql多数据源应用

山客的专栏 1639

PlutoSDR在matlab中的环境配置(包括驱动和硬件支持包)

双击下载到的驱动,除了点击接受协议和设置安装路径,其他只要点击下一步或者安装即可。登录或者注册你的账号,选择你的matlab版本(这里我的是2023b),点击下一步。设置安装路径,并选择我接受,点击下一步,即可安装完成,并在安装路径中得到。完成后,打开设备管理器,在端口和通用串行总线设备一栏,即可看见下图。点击进入,选择相应的系统安装包,这里我选择的Windows。可看到我们要安装的Pluto支持包,安装即可。右击桌面matlab,选择打开文件所在位置。右上角搜索pluto,选择并点击下一步。

weixin_53160338的博客 4864

SpringBoot 的多数据源配置

最近在项目开发中,需要为一个使用 MySQL 数据库的 SpringBoot 项目,新添加一个 PLSQL 数据库数据源,那么就需要进行 SpringBoot 的多数据源开发。代码很简单,下面是实现的过程。

未读代码 499

SAP公司间外协业务流程以及配置说明

SAP公司间外协业务流程以及配置说明

竹大的博客 7161

搞定汽车座椅电机EMC超标:一个PCB滤波板的实战设计与避坑心得

本文详细介绍了汽车座椅电机EMC超标问题的解决方案,通过PCB滤波板的实战设计,解决了传导发射测试超标问题。文章分享了在空间受限条件下的滤波电路架构设计、接地系统优化及迭代验证过程,为汽车直流电机的EMC整改提供了实用方法论。

weixin_30336061的博客 378

SpringBoot 的 MyBatis 多数据源配置

实验环境: JDK 1.8 SpringBoot 2.4.1 Maven 3.6.3 MySQL 5.7 因为我本地只有 MySQL 数据库,为了方便演示,我会在启动一个本地 MySQL,在 MySQL 创建两个数据库,每个库中均有一个表,以此进行演示。 数据准备 本地 MySQL 端口默认不做改动,端口号 3306。 创建数据库 demo1,demo2。在 demo1 数据库中创建表 book。 – create table create table Book ( id int auto

weixin_45032957的博客 378

从开源到落地:SimpleBGC 三轴稳像平台全栈技术解析(上)

SimpleBGC是一款开源的稳定云台控制系统,相比专业设备具有显著的价格优势(仅为1/5-1/10),采用模块化设计支持全场景适配。系统包含硬件设计、软件代码和算法三大核心:硬件采用STM32主控和IMU传感器,支持6步换向和FOC电机驱动;软件采用三层架构(驱动层、算法层、应用层),实现姿态解算和PID控制;算法方面提供互补滤波(基础版)和卡尔曼滤波(高端版),可达到±0.5°至±0.1°的稳定精度。该系统适用于无人机航拍、工业检测等多种应用场景,特别适合DIY开发者和中小企业进行定制化开发。

bother3000的博客 3682

基于Mybatis-plus的@DS对Mysql进行多数据源切换

因为是基于Mybatis-plus来进行多数据源切换的,所以先导入mybatis-plus的多数据源pom <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>3.3.1</version> </dependency> .

youyadefeiwu的博客 3057

mapbox进阶,dem数据转为等高面,加载转换后的等高面到地图

本文详细介绍如何基于mapbox-gl v3.*.* 版本,使用dem数据转为等高面,加载转换后的等高面到地图,亲测可用。希望能帮助到您。一起学习,加油!加油!

我哎GIS博客 407

理想L9高通QAM8797座舱域控制器全拆解|全网独家复现 硬件架构升级、电源散热优化、多屏低延迟交互、车机系统赋能高端智能座舱落地

随着智能汽车向舱驾一体、全域智能化、多模交互方向迭代,传统单一功能座舱芯片已无法满足多屏高刷渲染、全车AI语音、车内视觉感知、高速车载通信的叠加算力需求。2026款全新理想L9作为旗舰级智能SUV,全面搭载高通新一代旗舰座舱域控制器QAM8797,搭配自研马赫M100 AI芯片、国产车规主控芯片,构建起高性能、高可靠、低延迟的车载中央计算平台。

getusushu的博客 377

mybatis配置mysql数据源_springboot+mybatis+Druid配置多数据源(mysql+postgre)

springboot+mybatis+Druid配置多数据源(mysql+postgre)引入pom依赖org.mybatis.spring.bootmybatis-spring-boot-starter1.3.1com.alibabadruid-spring-boot-starter1.1.9org.springframework.bootspring-boot-starter-jdbcmysq...

weixin_39943992的博客 103

【Qt】解决 FTH: (11284): *** Fault tolerant heap shim applied to current process. (亲测有效)

计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers。容错堆垫片应用到当前的过程。这通常是由于以前的崩溃。win + r,输入regedit。

Fanjufei的博客 830

Springboot+mybatis多数据源配置(mysql和postgresql为例)

前言 本文主要介绍Springboot-mybatis配置多数据源,以mysql数据库和postgresql数据库为例。本文经过作者按步骤编写,测试可靠,欢迎学习。 一、配置application.yml文件 spring: datasource: db1: # 数据库1 mysql jdbc-url: jdbc:mysql://localhost:3306/trial_business_v2015?characterEncoding=utf8&useUnicode=true

爱学习的软件开发的博客 2780

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

springboot添加多数据源(mysql+pg)连接池并配置Mybatis

转载请注明出处:https://www.cnblogs.com/funnyzpc/p/9190226.html May 12, 2018 星期六,那是个晴天,天湛蓝湛蓝的非常干净,仿佛飘过一粒尘埃也能看得清清楚楚,然后就发生了些事情。。。很伤心很难过,至今也没能抹去,欸,我是怎样一步步把自己变成这个样子呢。 难过的事情总会在萦绕很久,罢了,这里还是不回忆了,就这样吧。 ...

hellojoy的博客 2145

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

spring boot + mybatis/mybatis-plus + hikari 多数据源配置

1、配置文件 第一数据源 spring.datasource.jdbc-url = jdbc:mysql://***:3306/dbname?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true spring.datasource.username = *** spring.datasource.passw...

Word_Nihao的博客 4718

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

SpringBoot/Mybatis 动态多数据源分享

本场 Chat 将使用 Spring Boot、Mybatis 搭建一个简易的 Java 服务,是一个不需要修改配置文件、不重启服务、动态切换数据源的项目,适合需要需要多数据源(经常变化的数据源,数据源 3 个以上等)的 Java 开发人员查阅。 该 Chat 偏向于实现动态加载数据源方式,能搭建一个能正常运行的动态多数据源的 Java 项目,同时会提供文章内所有的源码,以供读者快速搭建环境。故...

GitChat 1340

SpringBoot连接多数据源MySQL、SqlServer等(MyBatisPlus测试)

经过上述演示,我们已经实现了在springboot项目中实现多数据库源的连接和操作,如果需要使用不同数据库,按照上述操作思路即可实现。

qq_33312097的博客 196

SpringBoot多数据源动态切换,不影响业务逻辑正常运行,服务高可用

SpringBoot多数据源动态切换,不影响业务逻辑正常运行,服务高可用 本文使用Spring Boot 2.4.10版本和MyBatis实现多数据源动态切换,当主库MySQL宕机后自动切换到容灾PostgreSQL数据库。 数据库及数据表示例如下: MySQL数据库(主库): 创建goodsdb数据库,创建book_t数据表并初始化数据。 DROP TABLE IF EXISTS book_t; CREATE TABLE book_t ( book_id INT PRIMARY KEY AUTO_IN

liwenyang1992的专栏 1993

springboot+Druid+MybatisPlus整合多数据源(MySQL+postgresql)

在工作中,可能会有些项目会需要两个数据库,一部分操作是对于A数据库,一部分操作对于B数据库,于是在网上寻找方法,最后使用了这个mybatis-plus实现了动态数据源。

xikx99的博客 2574

Springboot+MybatisPlus 多数据源配置只需要这三步

Springboot+MybatisPlus 多数据源配置

baidu_16250655的博客 1132
上一篇: 算法--字符串转整数
下一篇: 拉勾课程--性能优化记录
CodersCoder
博客等级 码龄10年 90粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值