两个MySQL做双数据源如何配置_SpringBoot系列--Mysql、Sqlserver 双数据源配置

2023-11-12

在最近的项目开发中,需要用到Mysql和Sqlserverl两种数据库,也就是要进行双数据源的配置。网上看了下,大多比较繁琐,且不够明确。今天分享一个在SpringBoot 中简洁高效配置双数据源的方案。 项目结构如下:

e5a6c17747eebaa0df2f98294f9228fb.png

application.properties配置文件

spring.datasource.mysql.username=root

spring.datasource.mysql.password=123456

spring.datasource.mysql.driver-class-name=com.mysql.jdbc.Driver

spring.datasource.mysql.url=jdbc:mysql://localhost:3306/test

spring.datasource.sqlserver.username=root

spring.datasource.sqlserver.password=123456

spring.datasource.sqlserver.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver

spring.datasource.sqlserver.url=jdbc:sqlserver://localhost:1433;DatabaseName=test

连接池配置

package com.tcwong.demo.config;

import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;

import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.context.annotation.Primary;

import javax.sql.DataSource;

@Configuration

public class DataSourceConfig {

[@Primary](https://my.oschina.net/primary)

[@Bean](https://my.oschina.net/bean)

@ConditionalOnProperty(prefix = "spring.datasource.mysql")

public DataSource mysqlDataSource() {

return DruidDataSourceBuilder.create().build();

}

[@Bean](https://my.oschina.net/bean)

@ConditionalOnProperty(prefix = "spring.datasource.sqlserver")

public DataSource sqlserverDataSource() {

return DruidDataSourceBuilder.create().build();

}

}

或者

package com.tcwong.demo.config;

import com.alibaba.druid.pool.DruidDataSource;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.context.annotation.Primary;

import javax.sql.DataSource;

@Configuration

public class DataSourceConfig1 {

@Value("${spring.datasource.mysql.username}")

private String mysqlUserName;

@Value("${spring.datasource.mysql.password}")

private String mysqlPassword;

@Value("${spring.datasource.mysql.url}")

private String mysqlUrl;

@Value("${spring.datasource.mysql.driver-class-name}")

private String mysqlDriverClass;

@Value("${spring.datasource.sqlserver.username}")

private String sqlserverPassword;

@Value("${spring.datasource.sqlserver.password}")

private String sqlserverUserName;

@Value("${spring.datasource.sqlserver.url}")

private String sqlserverUrl;

@Value("${spring.datasource.sqlserver.driver-class-name}")

private String sqlserverDriverClass;

@Primary

@Bean

public DataSource mysqlDataSource() {

DruidDataSource druidDataSource = new DruidDataSource();

druidDataSource.setUsername(mysqlUserName);

druidDataSource.setPassword(mysqlPassword);

druidDataSource.setUrl(mysqlUrl);

druidDataSource.setDriverClassName(mysqlDriverClass);

return druidDataSource;

}

@Bean

public DataSource sqlserverDataSource() {

DruidDataSource druidDataSource = new DruidDataSource();

druidDataSource.setUsername(sqlserverUserName);

druidDataSource.setPassword(sqlserverPassword);

druidDataSource.setUrl(sqlserverUrl);

druidDataSource.setDriverClassName(sqlserverDriverClass);

return druidDataSource;

}

}

MyBatis配置

Mysql配置

package com.tcwong.demo.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.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.context.annotation.Primary;

import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.annotation.Resource;

import javax.sql.DataSource;

@Configuration

@MapperScan(basePackages = "com.tcwong.demo.dao.mysql"

,sqlSessionFactoryRef = "mysqlSqlSessionFactory",sqlSessionTemplateRef = "mysqlSqlSessionTemplate")

public class MysqlMapperConfig {

@Resource

private DataSource mysqlDataSource;

@Primary

@Bean

SqlSessionFactory mysqlSqlSessionFactory() {

SqlSessionFactory sqlSessionFactory = null;

try {

SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();

sqlSessionFactoryBean.setDataSource(mysqlDataSource);

sqlSessionFactoryBean.setTypeAliasesPackage("com.tcwong.demo.bean");

sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()

.getResource("classpath*:mapper/**/*.xml"));

sqlSessionFactory = sqlSessionFactoryBean.getObject();

} catch (Exception e) {

e.printStackTrace();

}

return sqlSessionFactory;

}

@Primary

@Bean

SqlSessionTemplate mysqlSqlSessionTemplate() {

return new SqlSessionTemplate(mysqlSqlSessionFactory());

}

}

Sqlserver配置

package com.tcwong.demo.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.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.annotation.Resource;

import javax.sql.DataSource;

@Configuration

@MapperScan(basePackages = "com.tcwong.demo.dao.sqlserver"

,sqlSessionFactoryRef = "sqlserverSqlSessionFactory", sqlSessionTemplateRef = "sqlserverSqlSessionTemplate")

public class sqlserverMapperConfig {

@Resource

private DataSource sqlserverDataSource;

@Bean

SqlSessionFactory sqlserverSqlSessionFactory() {

SqlSessionFactory sqlSessionFactory = null;

try {

SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();

sqlSessionFactoryBean.setDataSource(sqlserverDataSource);

sqlSessionFactoryBean.setTypeAliasesPackage("com.tcwong.demo.bean");

sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()

.getResource("classpath*:mapper/**/*.xml"));

sqlSessionFactory = sqlSessionFactoryBean.getObject();

} catch (Exception e) {

e.printStackTrace();

}

return sqlSessionFactory;

}

@Bean

SqlSessionTemplate sqlserverSqlSessionTemplate() {

return new SqlSessionTemplate(sqlserverSqlSessionFactory());

}

}

这里指定了xml的文件路径 和 数据库映射的JavaBean路径。Mysql 和 Sqlserver对应的Mapper 放在对应的Dao即可。

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

两个MySQL做双数据源如何配置_SpringBoot系列--Mysql、Sqlserver 双数据源配置 的相关文章

  • VGGNet实现CIFAR-100图像识别-2(图像增强/ImageDataGenerator)

    图像增强 ImageDataGenerator 官方文档直达 代码 注意 使用图像增强的原因 测试ImageDataGenerator对象的flow方法中batch size参数 具体分析ImageDataGenerator对象的flow方
  • Android博客周刊专题之#插件化开发#

    转自 http www androidblog cn index php Index detail id 16 本期专栏目讨论插件化开发 插件化涉及的东西很多 所以我们需要多个维度去学习 大概分为5个部分 预备知识 入门 进阶 系列 类库
  • 【H.264/AVC视频编解码技术详解】十九、熵编码(5):CABAC语法元素的二值化

    H 264 AVC视频编解码技术详解 视频教程已经在 CSDN学院 上线 视频中详述了H 264的背景 标准协议和实现 并通过一个实战工程的形式对H 264的标准进行解析和实现 欢迎观看 纸上得来终觉浅 绝知此事要躬行 只有自己按照标准文档
  • 更改bat文件图标_如何优雅地设置文件夹图标?收下我的小工具吧

    作者 富妈 在 Windows 系统 可以通过修改图标使文件夹更容易区分 可是如果需要美化的文件夹太多 一个个设置就显得很费力 而且移动文件夹或者重装系统后 图标也容易失效 这是一个很常见的问题 但网上相关的资料却比较少 很多小伙伴可能在搜
  • 关于电脑D盘(C盘等)出现管理员权限(影响删除,重命名),需要解除具体操作。

    管理员权限 影响新建文件 修改文件类型 内容 当安装软件时也带来诸多不便 对于某些语言输入器 编译器更是不友好 因为我们需要经常新建文件 修改文件 我就是在用VScode时发现的 D盘文件全都开启了管理员权限 研究一上午找到两种解决方案 第
  • Unity Camera 的跟踪,转动,缩放,代码教程 适合做角色的第一,第三人称视角

    Unity Camera 的跟踪 转动 缩放 代码教程 适合做角色的第一 第三人称视角 1 代码挂载到摄像机 camera上 Player是你要跟踪物体的位置 把你要跟踪的物体放上就行 2 源代码 using UnityEngine usi
  • python 3.6安装cPickle

    1 在python2 X中 需要安装cPickle 2 在python3 X中 这个包已被别的包替换 使用以下语句即可 import pickle as cPickle
  • string.IsNullOrEmpty()

    string IsNullOrEmpty 是一个判断字符串是否为空引用或者值为空的方法 string IsNullOrEmpty 返回值是boolen型 也就是true或者false
  • Bcrypt 加密算法研究与对比

    Bcrypt 加密算法研究与对比 一 什么是Bcrypt 二 Bcrypt如何加密与验证 一 encode方法加密 二 matches方法验证 三 如果使用彩虹表进行hash碰撞攻击会如何 四 比较 MD5加密算法的缺陷 相对于MD5 Bc
  • 循环语句和字符串拼接

    1 循环语句 循环语句就是让一部分代码重复执行 JavaScript中常用的循环语句有 for while do while 1 for循环 2 while循环 3 do while循环 2 字符串拼接 字符串之间使用 运算符 说明 数字和
  • 基于BERT Adapter的词汇增强型中文序列标注模型

    原创作者 疯狂的Max 论文Lexicon Enhanced Chinese Sequence Labelling Using BERT Adapter 解读 01 背景与动机 近年来 多项研究致力于将词汇信息融入中文预训练模型中以提升命名
  • lstm代码_ARIMA时间序列与LSTM神经网络的PK

    作者 李应硕 人大在读 授权转载 收藏順便 点个 赞 创作不易 前言 时间序列算是我接触的第一个统计学实践项目 也是它把我带进了机器学习的大门 当时的我的工作是根据过往投资和赎回量 每天预估一个需要留的钱 有点类似银行准备金 我本想自己写个
  • Vijava 学习笔记之CustomizationPassword

    CustomizationPassword类介绍 包含密码字符串和一个标志 指定字符串是否为纯文本或加密 Properties NAME TYPE DESCRIPTION plainText xsd boolean Flag to spec
  • c语言中ln,lg,log的表示

    c标准头文件math h中有两个与log有关的函数声明 double cdecl log double X double cdecl log10 double X 1 2 其中log代表ln 即loge log10顾名思义就是lg loge
  • Arduino 初识+项目

    目录 Arduino初识 电路的基本知识 基于此就可以做一些有趣的小玩意 第一个大坑 串口通信 项目 基于Arduino板控制小车 几大问题 1 控制电机转动 2 麦轮的安装 3 电路连接 4 使用PWM调速 5 优化小车行驶的平稳性 PI
  • aarch64交叉编译libturbojpeg

    0 目的 因项目上有使用jpeg turbo的需求 用的aarch64的平台 需要使用交叉编译工具来获取libturbojpeg so 1 libturbojpeg下载 libturbojpeg源码git地址 GitHub libjpeg
  • Hyperledger Fabric如何通过虚拟机部署以太坊智能合约

    EVM作为用户链代码安装到Fabric中 然后可以通过它部署智能合约 单个EVM链代码足以在通道上运行多个以太坊智能合约 链码不采用以太坊的共识方法 所有事务仍将遵循Fabric事务流中的执行 订单 验证步骤 确保在不同组织中的足够对等方安
  • 判断子序列

    给定字符串 s 和 t 判断 s 是否为 t 的子序列 leetcode链接 你可以认为 s 和 t 中仅包含英文小写字母 字符串 t 可能会很长 长度 500 000 而 s是个短字符串 长度 lt 100 字符串的一个子序列是原始字符串
  • 项目经理与技术经理的区别

    项目经理和技术经理有什么区别 区别有多大呢 这个问题此前我从没有认真的去思考过 直到被明确的问到的时候 才细思极恐 连两者的区别都没能有条理的讲出来 一 关于项目经理 在没有真正进入软件行业之前 对于系统集成方面的项目还是有些心得的 有种一

随机推荐

  • 编译Linux内核获取LLVM bitcode (LLVM IR)

    最近要获取linux内核的llvm bitcode 以便后续进行分析 例如获取callgraph等等 尝试了很多提取llvm bitcode的方法 用build bom wllvm 过程中也出现了很多错误 最后用wllvm终于成功了 记录下
  • Docker容器与虚拟化技术:Docker资源控制、数据管理

    目录 一 理论 1 资源控制 2 Docker数据管理 二 实验 1 Docker资源控制 2 Docker数据管理 三 问题 1 docker容器故障导致大量日志集满 造成磁盘空间满 2 当日志占满之后如何处理 四 总结 一 理论 1 资
  • 【模电】0014 运放自激振荡和消除(补偿)

    一般我们讨论的负反馈放大电路多关注其幅频特性 也就是它的增益 而对其相频特性关注的不多 这主要是因为 一个放大电路如果它工作状态是稳定的 其输入和输出相差一定的相位对分析它的特性并不影响 只是相当于信号延迟了一点时间 注意这里有个前提条件
  • 关于IP网段间互访的问题——路由是根本

    文章出处 http blog csdn net dog250 archive 2010 02 09 5303291 aspx 之所以IP网段间可以互相访问 完全靠的就是路由 因此路由是IP通信的根本 IP是机器可以进行通信的资格证书 而路由
  • 【满分】【华为OD机试真题2023 JAVA&JS】工作安排

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 工作安排 知识点循环数组贪心动态规划 时间限制 1s 空间限制 32MB 限定语言 不限 题目描述 小明每周上班都会拿到自己的工作清单 工作清单内包含n项工作 每项工作都有对应的
  • Vue Baidu Map使用

    百度地图官方提供的是常规
  • DS单链表--类实现

    用C 语言和类实现单链表 含头结点 属性包括 data数据域 next指针域 操作包括 插入 删除 查找 注意 单链表不是数组 所以位置从1开始对应首结点 头结点不放数据 输入 n 第1行先输入n表示有n个数据 接着输入n个数据 第2行输入
  • 螺旋队列(由里向外)

    假设有如下排列 21 22 20 7 8 9 10 19 6 1 2 11 18 5 4 3 12 17 16 15 14 13 1的坐标是 0 0 3的坐标是 1 1 7的坐标是 1 1 分析 第1层之内有1个数 第2层之内有9个数 第3
  • Kafka Connect JNDI注入漏洞复现(CVE-2023-25194)

    漏洞原理 Apache Kafka Connect中存在JNDI注入漏洞 当攻击者可访问Kafka Connect Worker 且可以创建或修改连接器时 通过设置sasl jaas config属性为com sun security au
  • Qt界面刷新优化的一些心得

    背景 一个类似Windows任务管理器的性能界面 该界面有多个曲线图同时定时刷新 每个曲线图包括多条曲线更新 数据更新频率大概为一秒一次 程序中曲线图已封装为自定义的图表类 给出数据更新接口 初始方案 主程序设计方案上 采用数据收集和数据更
  • 《云计算与大数据技术应用》

    第一章 云计算概述 1 1什么是云计算 1 1 1云计算的定义 云计算是分布式计算的一种 指的是通过网络 云 将巨大的数据计算处理程序分解成无数个小程序 然后 通过多部服务器组成的系统进行处理和分析这些小程序得到结果并返回给用户 云计算早期
  • javascript数组的直接量语言允许有可选的结尾的逗号

    var undefs 数组有2个元素 都是undefined 数组直接量的语法允许有可选的结尾的逗号 故 只有两个元素
  • OA会议管理系统之我的会议(会议排座&可拖拽座位&附源码)

    目录 一 前言 1 导读 二 我的会议功能实现 1 功能介绍 2 功能分析 3 功能实现 3 1 前期准备 3 2 dao层编写 3 3 jsp页面搭建 3 4 Web层编写 4 案例展示 一 前言 1 导读 OA会议管理系统之会议发布 内
  • RabbitMQ提供了6种消息模型介绍

    RabbitMQ提供了6种消息模型 但是第6种其实是RPC 并不是MQ 因此不予学习 那么也就剩下5种 但是其实3 4 5这三种都属于订阅模型 只不过进行路由的方式不同 一 基本消息模型 RabbitMQ是一个消息代理 它接受和转发消息 你
  • oracle删除重复数据保留第一条记录

    1 查找表中多余的重复记录 重复记录是根据单个字段 Id 来判断 select from 表 where Id in select Id from 表 group byId having count Id gt 1 2 删除表中多余的重复记
  • zoj 1201 Inversion

    题目意思 如果输入的是p类串 则输出i类串 如果输出的是i类 则输出p类串 p转i 寻找在p串中在j左边的比j大的数的个数 i串中的第j个数填为该数 i转p 从尾部开始 若第j个数的值为x 则说明在p串中j的左边有x个数大于j 通过从后到前
  • spring集成kafka,实现一个topic可以被多个group消费

    由于新公司是做物联网的 公司刚起步 没什么项目 就是在做一些基础的服务的搭建 现在微服务这么火 可想而知 Spring Boot Spring Cloud 是必须要会的技能 而做物联网 把各种智能设备的数据采集上来 也避免不了要用到消息系统
  • Linux 下qt creator 对c++ 和cuda混合编译生成.so 文件

    问题一 creator 上如何设置可以编译输出 so 文件 要做哪些工作呢 解决如下 1 TEMPLATE lib DEFINES TESTPCL LIBRARY 我的项目名 TARGET testPCL 2 在我要开放出去的接口类那里 做
  • JavaFX之Drag And Drop拖放操作

    声明 本博客文章原创类别的均为个人原创 版权所有 转载请注明出处 http blog csdn net ml3947 看到有网站直接copy不加链接 当然我的个人博客文章目前都是从我的CSDN博客转移上去的 大家好 新的JavaFX的教程又
  • 两个MySQL做双数据源如何配置_SpringBoot系列--Mysql、Sqlserver 双数据源配置

    在最近的项目开发中 需要用到Mysql和Sqlserverl两种数据库 也就是要进行双数据源的配置 网上看了下 大多比较繁琐 且不够明确 今天分享一个在SpringBoot 中简洁高效配置双数据源的方案 项目结构如下 application