Springboot配置双数据源

2023-11-18

Springboot配置双数据源

数据库相关信息:
在这里插入图片描述
在这里插入图片描述
yml相关配置(单数据源与双数据源进行对比):

# 数据源配置(Mysql)
spring:
  datasource:
    # 单数据源(需要删除双数据源相关配置文件,注意是url)
#    url: jdbc:mysql://localhost:3306/standard?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT&autoReconnect=true
#    driver-class-name: com.mysql.cj.jdbc.Driver  # 如果驱动类报红,将pom.xml中的mysql依赖的scope节点删除即可。
#    username: root
#    password: root
    # 双数据源
    database1:  # 数据源1(standard 数据库,注意是jdbc-url)
      jdbc-url: jdbc:mysql://localhost:3306/standard?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT&autoReconnect=true
      driver-class-name: com.mysql.cj.jdbc.Driver  # 如果驱动类报红,将pom.xml中的mysql依赖的scope节点删除即可。
      username: root
      password: root
    database2:  # 数据源2(startplan 数据库,注意是jdbc-url)
      jdbc-url: jdbc:mysql://localhost:3306/startplan?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT&autoReconnect=true
      driver-class-name: com.mysql.cj.jdbc.Driver  # 如果驱动类报红,将pom.xml中的mysql依赖的scope节点删除即可。
      username: root
      password: root
      
# Mybatis配置(单数据源需要配置,双数据源的时候不需要配置)
#mybatis:
#  type-aliases-package: com.kd.opt.entity      # 注意:对应实体类的路径
#  mapper-locations: classpath:mapper/*.xml    # 注意:一定要对应mapper映射xml文件的所在路径

双数据源相关配置文件:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

package com.kd.opt.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.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

/**
 * 数据源1相关配置(作为主数据库,项目启动默认连接此数据库)
 *
 * 主数据库都有 @Primary注解,从数据库都没有
 *
 * 需要额外注意的位置
 * 1:扫描Dao层包路径,basePackages = "com.kd.opt.dao"
 * 2:关联yml中的数据源,@ConfigurationProperties(prefix = "spring.datasource.database1")
 * 3:扫描相关xml文件的所在路径,"classpath:mapper/*.xml"
 *
 * @author 小辰哥哥
 */
@Configuration
@MapperScan(basePackages = "com.kd.opt.dao", sqlSessionTemplateRef = "sqlSessionTemplate1")
public class DatabaseConfig1 {
    @Bean(name = "dataSource1")
    @ConfigurationProperties(prefix = "spring.datasource.database1")
    @Primary
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "sqlSessionFactory1")
    @Primary
    public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource1") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
        return bean.getObject();
    }

    @Bean(name = "transactionManager1")
    @Primary
    public DataSourceTransactionManager transactionManager(@Qualifier("dataSource1") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "sqlSessionTemplate1")
    @Primary
    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("sqlSessionFactory1") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}
package com.kd.opt.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 org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

/**
 * 数据源2相关配置(作为从数据库)
 *
 * 主数据库都有 @Primary注解,从数据库都没有
 *
 * 需要额外注意的位置
 * 1:扫描Dao层包路径,basePackages = "com.kd.opt.dao2"
 * 2:关联yml中的数据源,@ConfigurationProperties(prefix = "spring.datasource.database2")
 * 3:扫描相关xml文件的所在路径,"classpath:mapper2/*.xml"
 *
 * @author zhouziyu
 */
@Configuration
@MapperScan(basePackages = "com.kd.opt.dao2", sqlSessionTemplateRef = "sqlSessionTemplate2")
public class DatabaseConfig2 {
    @Bean(name = "dataSource2")
    @ConfigurationProperties(prefix = "spring.datasource.database2")
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "sqlSessionFactory2")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource2") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper2/*.xml"));
        return bean.getObject();
    }

    @Bean(name = "transactionManager2")
    public DataSourceTransactionManager transactionManager(@Qualifier("dataSource2") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "sqlSessionTemplate2")
    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("sqlSessionFactory2") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

进行单元测试:

@Test
public void method() {

   // 主数据库,数据源1(standard)
   List<Standard> standards = standardMapper.selectAll();

   // 从数据库,数据源2(startplan)
   List<Standard2> list = standardMapper2.selectAll();

   LOGGER.debug("数据源1:" + standards);
   LOGGER.debug("数据源2:" + list);
}

在这里插入图片描述


总结

每天一个提升小技巧!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Springboot配置双数据源 的相关文章

  • Spring Boot - YML 配置 - 合并时擦除条目

    我的应用程序有一个基本 YML 配置 在类路径中如下所示 hello world values bar name bar name description bar description foo name foo name descript
  • 在 Spring Boot 测试期间替换 @Configuration 中的 @Value 属性

    Scenario 我有一个 Spring Boot 应用程序 Configuration带注释的 Spring 配置类 其中包含一些 Value带注释的字段 为了进行测试 我想用自定义测试值替换这些字段值 不幸的是 这些测试值不能使用简单的
  • 如何导出带有数据的 MySQL 架构?

    我有一个完整的架构 其中有许多表 其中包含 MySQL 查询浏览器中的数据 现在我想将这个包含所有表 数据的完整数据库发送给我的同事 我怎样才能将其发送给我的同事 以便他可以将这个完整的架构放入他的 MySQL 查询浏览器中 Thanks
  • MySQL Python 关于重复键更新值

    我正在研究使用 python 将 JSON 数据上传到 MySQL 我需要在插入语句中包含 ON DUPLICATE KEY UPDATE VALUES 但在 Python 中遇到了问题 如果我运行以下代码 一切正常 import json
  • 猪的组连接等效吗?

    试图在 Pig 上完成这个任务 寻找 MySQL 的 group concat 等效项 例如 在我的表中 我有以下内容 3fields userid clickcount pagenumber 155 2 12 155 3 133 155
  • 在 django ORM 中查询时如何将 char 转换为整数?

    最近开始使用 Django ORM 我想执行这个查询 select student id from students where student id like 97318 order by CAST student id as UNSIG
  • 日期时间与时间戳字段

    我是 MySQL 数据库的新手 您是否建议在表创建中使用日期时间或时间戳字段以及原因 我正在使用 MySQL 5 7 和 innodb 引擎 Thanks 我会用TIMESTAMP对于任何需要自动管理的事情 因为它支持诸如ON UPDATE
  • 获取mysql中逗号分隔行中不同值的计数

    一个表 Jobs 有 2 列 JobId 城市 当我们保存工作时 工作位置可能是多个城市 如下所示 JobId City 1 New York 2 New York Ohio Virginia 3 New York Virginia 我如何
  • 从 call_log 中获取最大并发通话数

    我需要帮助在 MySQL 5 0 77 中编写一个查询 根据下面所示的数据 办公室一天的通话量 返回并发电话呼叫的峰值数量 我只是想知道一天中任何特定时间同时打电话的人数最多是多少 首先 这是 MySQL 表 CREATE TABLE ca
  • 如何删除 MySQL 数据库?

    你可能从我的上一个问题中注意到一个问题引发了更多的问题 在 MySQL 监视器中阅读 MySQL 手册 https stackoverflow com questions 1081399 我的数据库现在无法使用 部分原因是我想破坏东西并且无
  • Dapper 或 MySql 未找到包含句号“.”的存储过程。

    我有一个简单的 C 控制台 它使用 Dapper ORM 调用本地 MySql 数据库 以执行名为的存储过程users UserCreate 但是 当运行查询时 我收到一个异常 在数据库 用户 中找不到过程或函数 UserCreate Bu
  • Spring Boot,Websockets无法从Session获取用户(即java.security.Principal)

    与 一起工作Spring Boot 1 2 1 RELEASE and Spring Websockets 运行嵌入式时存在部署运行时问题Jetty 9 我不能伪造用户 java security Principal 当应用程序部署在本地主
  • Mysql带限制的删除语句

    我试图从表中删除行 但出现错误 DELETE FROM chat messages ORDER BY timestamp DESC LIMIT 20 50 我在 50 时收到此错误 您的 SQL 语法有错误 检查与您的 MySQL 服务器版
  • MySQL JOIN 滥用?情况会变得有多糟糕?

    我读了很多关于关系数据库的文章 在每个 SELECT 上使用许多 JOIN 语句 但是 我一直想知道滥用这种方法从长远来看是否会出现任何性能问题 例如 假设我们有一个users桌子 我通常会添加 最常用 的数据 而不是进行任何额外的联接 例
  • ElasticBeanstalk Java,Spring 活动配置文件

    我正在尝试通过 AWS ElasticBeanstalk 启动 spring boot jar 一切正常 配置文件为 默认 有谁知道如何为 java ElasticBeanstalk 应用程序 不是 tomcat 设置活动配置文件 spri
  • “修改列”与“更改列”

    我知道 我们不能使用重命名列MODIFY COLUMN语法 但我们可以使用CHANGE COLUMN syntax 我的问题是 主要用途是什么modify syntax 例如 ALATER TABLE tablename CHANGE co
  • Keycloak - 自定义 SPI 未出现在列表中

    我为我的 keycloak 服务器制作了一个自定义 SPI 现在我必须在管理控制台上配置它 我将 SPI 添加为模块 并手动安装 因此我将其放在 module package name main 中 并包含 module xml 我还将其放
  • 针对约 225 万行的单表选择查询的优化技术?

    我有一个在 InnoDB 引擎上运行的 MySQL 表 名为squares大约有 2 250 000 行 表结构如下 squares square id int 7 unsigned NOT NULL ref coord lat doubl
  • 休眠以持久保存日期

    有没有办法告诉 Hibernate java util Date 应该持久保存 我需要这个来解决 MySQL 中缺少的毫秒分辨率问题 您能想到这种方法有什么缺点吗 您可以自己创建字段long 或者使用自定义的UserType 实施后User
  • rake db 问题:迁移 -

    我无法为 Ruby on Rails 设置 MySQL 数据库 设置数据库并确保 config database yml 文件匹配后 我遇到了以下错误消息 U Rails alpha gt rake db migrate trace in

随机推荐

  • Android开源框架之Picasso(图片加载框架)

    简介 Picasso是Square公司出品的一个强大的图片下载和缓存图片库 在adapter中需要取消已经不在视野范围的ImageView图片资源的加载 否则会导致图片错位 Picasso已经解决了这个问题 使用复杂的图片压缩转换来减少内存
  • ue4 蓝图通信的几种方式

    一 设置公有变量 完成通信 1 蓝图类Door bp中声明变量NewVar 1 为公有 确定好变量类型 编译 2 关卡视口中选中这个蓝图类Door bp的实例 世界大纲视图下的细节面板中 默认下出现公有变量名称NewVar 1 用吸管吸取关
  • springboot+poi开发excel导出 加载Excel模板导出 Excel导出详解

    提到Excel导出功能 可能很多人都使用springmvc框架做过 笔者今天要给大家分享的是基于springBoot开发Excel复杂模板导出功能 所谓复杂模板指在模板里的特定表头里有不同的单元格合并以及背景色 字体颜色的填充 文本内容的对
  • linux下libpcap抓包分析

    linux下libpcap抓包分析 一 首先下载libpcap包http www tcpdump org latest release 然后安装 安装完成后进入安装根目录的tests文件夹 编译运行findalldevstest c 编译时
  • 实现mnist手写数字识别(第一周)

    本文为 365天深度学习训练营 中的学习记录博客 参考文章 365天深度学习训练营 第P1周 实现mnist手写数字识别 Pytorch实战 第P1周 实现mnist手写数字识别 qq com 原作者 K同学啊 接辅导 项目定制 我的环境
  • 使用codestriker搭建代码评审平台

    codestriker是用perl语言开发的 可以使用apache cgi进行访问的代码评审web站点 搭建过程如下 1 yum install perl 2 yum install highlight 3 配置codestriker co
  • k8s部署minio

    安装krew插件 官网地址 https krew sigs k8s io docs user guide setup install set x cd mktemp d OS uname tr upper lower
  • 图论算法<三>:判断有向图中是否有存在循环 ,以及环的个数和各个环中的元素

    1 目的 判断有向图中是否有存在循环 以及环的个数和各个环中的元素 2 示例效果 2 1 原始数据 路线起终点整理如下 共计12个顶点 19条边 起点 终点 1 最后的1代表起点终点是连通的 起点 终点 1 2 4 1 起点 终点 1 9
  • 深度学习理论及运用(三)Deep feedforward network

    转化成非线性 1 RBF径向基函数 2 利用sift特征以及K means 3 用数据去训练 举例 异或门 使用非线性运算 用图来表示实现线性可分的过程 目的 优化目标函数 Cost Functions 目标函数 交叉熵 公式前加负号转化为
  • Mybatis-Plus&&Druid多数据源配置

    多数据源配置思路 yml中配置多个数据源 通过AOP自动切换不同的数据源 配合Mybatis plus使用 yml配置 spring datasource druid db1 url jdbc mysql 10 168 1 118 3306
  • JPA对象的四种状态

    JPA对象的四种状态 1 瞬时状态 Transient 与数据库没有对应 跟Session没有关联 一般是新new出的对象 2 持久化状态 Persist 对象再Session的管理之中 最终会有对应的数据记录 特点 a 有OID 唯一标示
  • keyshot环境素材文件_做设计,用keyshot简单6步渲染出满意效果图,上手容易你也学得会...

    点击上方 机械设计一点通 关注我们 每天学习一个机械设计相关知识点 KeyShot是一个完全基于CPU为三维数据进行渲染和动画操作的独立渲染器 广泛用于高精度图像的实时呈现 为设计师 工程师和CG专业人士轻松地创建逼真的图像和三维模型动画提
  • python学习笔记---高级特性【廖雪峰】

    高级特性 切片 Slice 对应上面的问题 取前3个元素 用一行代码就可以完成切片 gt gt gt L 0 3 Michael Sarah Tracy L 0 3 表示 从索引0开始取 直到索引3为止 但不包括索引3 即索引0 1 2 正
  • 用c++编写网络爬虫

    include
  • el-date-picker时间选择器设置可选范围当前时间的六个月内

    el date picker时间选择器
  • Vue3快速上手

    Vue3快速上手 1 Vue3简介 2020年9月18日 Vue js发布3 0版本 代号 One Piece 海贼王 耗时2年多 2600 次提交 30 个RFC 600 次PR 99位贡献者 github上的tags地址 https g
  • 三分钟看懂神经网络机器翻译

    神经网络机器翻译 NMT 已成为本地化行业中最热门的话题之一 与以往基于统计的机器翻译 SMT 相比 可以使翻译质量提升 30 同时解决了远距离语言对的复杂性问题 如中文到英语 日语到英语等 SDL 的一项近期调查显示 61 的受访者认为机
  • Dex文件加载以及类加载流程

    Dex文件加载以及类加载流程 安卓源码连接 http androidxref com 4 4 4 r1 app在启动的过程中创建了PathClassLoader加载dex文件 那么我们跟进PathClassLoader libcore da
  • 2022-2027年中国金融市场规模现状及投资规划建议报告

    报告类型 产业研究 报告格式 电子 纸介版 出品单位 华经产业研究院 本报告由华经产业研究院重磅推出 对中国金融行业的发展现状 竞争格局及市场供需形势进行了具体分析 并从行业的政策环境 经济环境 社会环境及技术环境等方面分析行业面临的机遇及
  • Springboot配置双数据源

    Springboot配置双数据源 数据库相关信息 yml相关配置 单数据源与双数据源进行对比 数据源配置 Mysql spring datasource 单数据源 需要删除双数据源相关配置文件 注意是url url jdbc mysql l