springboot连接多个库

news2024/11/14 19:20:56

一个SpringBoot项目,同时连接两个数据库:比如一个是Mysql数据库,一个是oracle数据库(啥数据库都一样,连接两个同为oracle的数据库,或两个不同的数据库,只需要更改对应的driver-class-name和jdbc-url等即可)注意:连接什么数据库,要引入对应数据库的包。

第一步:

导入pom

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.0</version>
</dependency>
 
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

第二步:

修改application.yml配置文件(我采用本地的,IP地址是一致的,实际开发中,是两台云服务,两台MySQL地址进行主从读写)

    mysql1:
      driver-class-name: com.mysql.cj.jdbc.Driver
      jdbcUrl: jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
      username: "root"
      password: "12345678"
      type: com.alibaba.druid.pool.DruidDataSource
    mysql2:
      driver-class-name: com.mysql.cj.jdbc.Driver
      jdbcUrl: jdbc:mysql://localhost:3306/test1?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
      username: "root"
      password: "12345678"
      type: com.alibaba.druid.pool.DruidDataSource

在这里插入图片描述

注意格式上面spring.datasource省略了

第三步:

建造配置类:
(1)第一个库配置信息:

/**
 * 数据库leadnews_article
 */
@Configuration
@MapperScan(basePackages = {"com.example.demo.mapper.db1"}, sqlSessionFactoryRef = "sqlSessionFactoryArticle")
public class DBSrcArticle {
    @Bean
    public SqlSessionFactory sqlSessionFactoryArticle(@Qualifier("mysql1") DataSource dataSource) throws Exception {
        MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
        sqlSessionFactory.setDataSource(dataSource);
        sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources("classpath:mapper/db1/*.xml"));
        return sqlSessionFactory.getObject();
    }

    @Bean
    public SqlSessionTemplate sqlSessionTemplateArticle(@Qualifier("sqlSessionFactoryArticle") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

(2)第二个库配置

/**
 * 数据库leadnews_user
 */
@Configuration
@MapperScan(basePackages = {"com.example.demo.mapper.db2"}, sqlSessionFactoryRef = "sqlSessionFactoryUser")
public class dBSrcUser {
    @Bean
    @Primary
    public SqlSessionFactory sqlSessionFactoryUser(@Qualifier("mysql2") DataSource dataSource) throws Exception {
        MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
        sqlSessionFactory.setDataSource(dataSource);
        sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources("classpath:mapper/db2/*.xml"));
        return sqlSessionFactory.getObject();
    }

    @Bean
    @Primary
    public SqlSessionTemplate sqlSessionTemplateUser(@Qualifier("sqlSessionFactoryUser") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

(3)数据源配置:

/**
 * 数据源配置
 */
@Configuration
public class DataSourceConfig {
    @Primary
    @Bean(name = "mysql1")
    @ConfigurationProperties(prefix = "spring.datasource.mysql1")
    public DataSource dBSrcArticle() {
        return DataSourceBuilder.create().build();
    }

    @Primary
    @Bean(name = "mysql2")
    @ConfigurationProperties(prefix = "spring.datasource.mysql2")
    public DataSource dBSrcUser() {
        return DataSourceBuilder.create().build();
    }
}
注意:连接两个以上的数据库,需要对mapper文件夹进行分包

在这里插入图片描述

第四步:

在启动类中加上这三个注解:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@MapperScan(basePackages = {"com.example.demo.entity.db1"}, sqlSessionFactoryRef = "sqlSessionFactoryArticle")
@MapperScan(basePackages = {"com.example.demo.entity.db2"}, sqlSessionFactoryRef = "sqlSessionFactoryUser")

此时:已经可以访问两个数据库内容了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1813804.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

视觉SLAM14精讲——相机与图像3.2

视觉SLAM14精讲 三维空间刚体运动1.0三维空间刚体运动1.1三维空间刚体运动1.2李群与李代数2.1相机与图像3.1 视觉SLAM14精讲——相机与图像3.2 视觉SLAM14精讲畸变有关重投影误差缩放实际使用 畸变 相机畸变是相机镜头光学缺陷所致的缺陷&#xff0c; 在光学领域这种问题是没…

Apple Intelligence:一文详细解读苹果AI!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

更适合工程师和研究僧的FPGA专项培训课程

各位编程精英er~ 社区打造的FPGA工程师培训班上线后&#xff0c;有不少同学后台私信询问&#xff1a;“能不能出个那种专门针对某个知识点的课程呢&#xff1f;我想针对自己的薄弱点深入学习。” 贴心如我&#xff0c;当然会满足大家的学习需求啦。本周&#xff0c;社区FPGA专…

Anime Girls Pack

动漫女孩包 35个动画&#xff08;就地&#xff09;支持人形。 8情绪。 角色列表&#xff1a;原艾艾琪惠美子惠理文子星薰和子佳子奈子理子凛老师小樱老师津雨僵尸女孩01 下载&#xff1a;​​Unity资源商店链接资源下载链接 效果图&#xff1a;

《维汉翻译通》App的OCR识别技术难度怎么样?通过哪些优化措施来提高文字识别的准确率呢?

《维汉翻译通》App的OCR技术在处理不同字体和大小的文本时&#xff0c;采用了以下优化措施来确保高准确率&#xff1a; 多字体支持&#xff1a;OCR引擎能够识别多种字体样式&#xff0c;包括常见的印刷体和手写体&#xff0c;以及一些特殊的艺术字体。 自适应缩放&#xff1a…

Go使用https

一、服务端 1. 生成私钥和证书 安装OpenSSL windows安装OpenSSL生成CA证书创建证书 以上两个步骤&#xff0c;参考&#xff1a;Go http2 和 h2c 2. 代码 package mainimport ("log""net/http""time""golang.org/x/net/http2" )co…

JVM (二)类加载

一&#xff0c;类的生命周期 加载 连接 验证 准备 解析 初始化 使用 卸载 加载、验证、准备和初始化这四个阶段发生的顺序是确定的&#xff0c;而解析阶段则不一定&#xff1b; 类加载几个阶段按顺序开始&#xff0c;而不是按顺序进行或完成&#xff0c;通常都会交叉进…

2024 New Relic Java 生态系统报告

New Relic 发布了 2024 年度 Java 生态系统报告&#xff0c;数据来源于使用 New Relic 监控的线上 Java 应用。从这个报告中&#xff0c;我们可以看到 Java 发展的一些趋势。 在 Java 版本方面&#xff0c;新版本的使用率越来越高。Java 11 的使用率是 32.9%&#xff0c;Java 1…

Github 2024-06-12 C开源项目日报 Top10

根据Github Trendings的统计,今日(2024-06-12统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量C项目10PHP项目1PLpgSQL项目1C++项目1Ventoy: 100%开源的可启动USB解决方案 创建周期:1534 天开发语言:C协议类型:GNU General Public Licen…

软件架构风格探析

软件架构是系统设计的基石&#xff0c;它定义了不同组件、层次之间的交互和整合方式。选择恰当的架构风格对于构建高效、可维护以及可扩展的软件系统至关重要。本文将详细探讨几种关键的软件架构风格&#xff0c;包括数据流风格、仓库、调用返回、独立构件和虚拟机&#xff0c;…

课时152:项目发布_手工发布_方案解读

1.2.1 方案解读 学习目标 这一节&#xff0c;我们从 基础知识、简单实践、小结 三个方面来学习 基础知识 案例需求 实现一套业务环境的项目发布流程&#xff0c;基本的网站架构效果如下&#xff1a;架构解读&#xff1a;负载均衡采用Nginx服务&#xff0c;基于请求内容进行…

18.3 HTTP服务器-响应不同类型的内容和请求、获取请求数据

1. 响应不同类型的内容 在向客户端返回响应时&#xff0c;服务器应根据客户端的具体需求&#xff0c;为其提供不同类型的内容。一些常见的内容类型包括&#xff1a; text/plain —— 纯文本格式 text/html —— HTML格式 application/json —— JSON格式 application/xml —…

Java多线程CompletableFuture使用

引言 一个接口可能需要调用N个其他服务的接口&#xff0c;这在项目开发中非常常见。如果是串行执行的话&#xff0c;接口的响应速度会很慢。考虑到这些接口之间有大部分都是无前后顺序关联的&#xff0c;可以并行执行。就比如说调用获取商品详情的时候&#xff0c;可以同时调用…

高效换热管

绕管式高效换热器 绕管换热器是一种结构紧凑&#xff0c;传热效率高的新型高效换热器。换热管按螺旋线形状交替缠绕在芯筒与外筒之间&#xff0c;相邻两层螺旋状换热管旋向相反&#xff0c;并采用一定形状的定距元件使之保持一定间距。层与层间换热管反向缠绕&#xff0c;极大…

解决python import时ModuleNotFoundError异常

文章目录 前言 一 import索引机制二 ModuleNotFoundError原因及其解决办法1. 模块&#xff0c;包名字错误2. 模块&#xff0c;包未导入或未安装3. 模块&#xff0c;包命名冲突4. 模块&#xff0c;包路径不在import索引范围内(常见且重点) 前言 在学习和使用python import xxx时…

“改进型”Howland 电流泵电路

“改进型”Howland 电流泵电路 “改进型”Howland 电流泵是一种使用差分放大器在分流电阻器 (Rs) 上施加电压的电路&#xff0c;从而产生能够驱动大范 围负载电阻的双极性&#xff08;拉电流或灌电流&#xff09;压控电流源。 设计注释 确保运算放大器的输入端&#xff08;V…

Spring应用如何打印access日志和out日志(用于分析请求总共在服务耗费多长时间)

我们经常会被问到这样一个问题。你接口返回的好慢呀&#xff0c;能不能提升一下接口响应时间啊&#xff1f;这个时候我们就需要去分析&#xff0c;为什么慢&#xff0c;慢在哪。而这首先应该做的就是确定接口返回时间过长确实是在服务内消耗的时间。而不是我们将请求发给网关或…

STM32高级篇—按键FIFO

想成问一名非常优秀的嵌入式软件工程师&#xff0c;是需要掌握很多知识的。 完成STM32的基础内容的学习后&#xff0c;我们也进入到学习STM32高级的内容上。 本人也是一名嵌入式的初级入坑人&#xff0c;写的内容可能会有错误&#xff0c;或者不正确的地方也请大家多多指教&…

1.0 Android中Activity的基础知识

一&#xff1a;Activity的定义 Activity是一个应用组件&#xff0c;它提供了一个用户界面&#xff0c;允许用户执行一个单一的、明确的操作&#xff0c;用户看的见的操作都是在activity中执行的。Activity的实现需要在manifest中进行定义&#xff0c;不让会造成程序报错。 1.…

【动态规划】| 路径问题之不同路径 力扣62

&#x1f397;️ 主页&#xff1a;小夜时雨 &#x1f397;️ 专栏&#xff1a;动态规划 &#x1f397;️ 如何活着&#xff0c;是我找寻的方向 目录 1. 题目解析2. 代码 1. 题目解析 题目链接: https://leetcode.cn/problems/unique-paths/description/ 通常动态规划的题目有…