SpringBoot同时连接两个数据库

springboot的yml配置文件通过db2的方式整合mysql springboot整合mysql很简单,多数据源就master,slave就行了,但是在整合db2就需要另起一行,以下是同一个yml文件。ok这样就能通过config获取到了,下面是config源码。先配置mysql,代码如下。 阅读详情

前言

  • 应用场景不同,操作主数据库db_1之外,还需要操作从数据库db_2
  • 不管操作什么数据库,配置数据库连接时注意:driver-class-name 和 jdbc-url

代码实现

1. 修改 application.yml配置文件,添加db_2数据库连接

  • 注意:配置连接两个数据库,url改为:jdbc-url
server:
  port: 8083
  servlet:
    context-path: /mes
spring:
  db1:
    datasource:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/lmes
      username: root
      password: root
      type: com.alibaba.druid.pool.DruidDataSource
  db2:
    datasource:
      driver-class-name: oracle.jdbc.OracleDriver
      url: jdbc:oracle:thin:@//172.20.10.101:1521/PROD
      username: apps
      password: apps
      type: com.alibaba.druid.pool.DruidDataSource

2. 新建config包,添加db1和db2的配置文件

  • 主数据库与从数据库配置区别:主数据库有 @Primary注解,从数据库都没有
    在这里插入图片描述

2.1 主数据库db1,项目启动默认连接此数据库:PrimaryDataSourceConfig

package com.bbzd.mes.common.datasources;

import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.type.JdbcType;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.boot.autoconfigure.MybatisProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;
import java.io.IOException;
import java.util.Optional;
import java.util.stream.Stream;

@Configuration
@EnableConfigurationProperties(MybatisProperties.class)
public class PrimaryDataSourceConfig {
    @Autowired
    private MybatisProperties properties;

    @Bean(name = "db1DataSource")
    @ConfigurationProperties(prefix = "spring.db1.datasource")
    @Primary
    public DataSource db1DataSource() {
        return DruidDataSourceBuilder.create().build();
    }

    @Bean(name = "sqlSessionFactory")
    @ConfigurationProperties(prefix = "mybatis")
    @Primary
    public SqlSessionFactory sqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setTypeAliasesPackage(properties.getTypeAliasesPackage());
        bean.setMapperLocations(resolveMapperLocations(properties.getMapperLocations()));
        properties.getConfiguration().setJdbcTypeForNull(JdbcType.NULL);
        bean.setConfiguration(properties.getConfiguration());
        return bean.getObject();
    }

    private Resource[] resolveMapperLocations(String[] mapperLocations) {
        PathMatchingResourcePatternResolver pathMatchingResourcePatternResolver = new PathMatchingResourcePatternResolver();

        return Stream.of(Optional.ofNullable(mapperLocations).orElse(new String[0]))
                .flatMap(location -> Stream.of(getResources(pathMatchingResourcePatternResolver, location))).toArray(Resource[]::new);
    }

    private Resource[] getResources(PathMatchingResourcePatternResolver pathMatchingResourcePatternResolver, String location) {
        try {
            return pathMatchingResourcePatternResolver.getResources(location);
        } catch (IOException e) {
            return new Resource[0];
        }
    }
    
    @Bean(name = "db1TransactionManager")
    @Primary
    public DataSourceTransactionManager testTransactionManager(@Qualifier("db1DataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }


}

2.2 从数据库db2:DataSource2Config

package com.bbzd.mes.common.datasources;

import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = "com.bbzd.mes.oracledao",sqlSessionFactoryRef = "db2SqlSessionFactory")
public class DataSource2Config {

    @Bean(name = "db2DataSource")
    @ConfigurationProperties(prefix = "spring.db3.datasource")
    public DataSource db3DataSource() {
        return DruidDataSourceBuilder.create().build();
    }

    @Bean(name = "db2SqlSessionFactory")
    public SqlSessionFactory db2SqlSessionFactory(@Qualifier("db2DataSource") DataSource datasource)
            throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(datasource);
        bean.setMapperLocations(
                new PathMatchingResourcePatternResolver().getResources("classpath*:oracle_mappers/*.xml"));
        return bean.getObject();
    }

    @Bean(name="db2transactionManager")
    public DataSourceTransactionManager transactionManagerOne(){
        return  new DataSourceTransactionManager(db3DataSource());
    }

    @Bean(name = "db2JdbcTemplate")
    public JdbcTemplate jdbcTemplate(
            @Qualifier("db2DataSource") DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }
}

3. dao层

注意:主数据库与从数据库区别:从数据库需要使用@Transactional 注解指向db2数据源

3.1 主数据库db1,dao层写法

public interface UserMapper {
    boolean save(UserVo userVo);
}

3.2 从数据库db2,dao层写法

@Transactional(value = "db2transactionManager")
public interface UserMapper {
    UserDto findById(Inter id);
}

4. resources目录下xml注意事项

db1 和 db2 xml文件 namespace不同

  • 数据库db1,User.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.bbzd.mes.dao.UserMapper">

</mapper>
  • 数据库db2,User.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.bbzd.mes.oracledao.UserMapper">

</mapper>
通过Docker启动DB2,并在Spring Boot整合DB2(Druid连接池) DB2是IBM的一款优秀的关系型数据库,简单学习一下。 阅读详情

相关推荐

通过Docker启动DB2,并在Spring Boot整合DB2

1 简介 DB2是IBM的一款优秀的关系型数据库,简单学习一下。 2 Docker安装DB2 为了快速启动,直接使用Docker来安装DB2。先下载镜像如下: docker pull ibmcom/db2:11.5.0.0 启动数据库如下: docker run -itd \ --name mydb2 \ --privileged=true \ -p 50000:50000 \ -e LICENSE=accept \ -e DB2INST1_PASSWORD=pkslow

南瓜慢说 1151

关于Django项目中创建MySQL数据库注意事项

关于Django项目中创建MySQL数据库注意事项 应用Django Web框架开发应用时,MySQL是经常使用到的数据库之一,如何在Django应用中使用MySQL数据库,以及如何避免与解决使用过程中出现的一些问题,本文将一些异常解决方法整理如下,供可能遇到问题的各位同仁参考。 一、基本条件 本文使用的Django版本为3.0版,python版本为3.8.3,MySQL workbench为8.0。 二、数据库设置 通过Pycharm创建项目之后,Pycharm会默认使用sqlite3数...

mywindpursue的博客 659

Springboot项目同时连接SQLServer数据库和MySql数据库

今天的任务就是把同时连接SQLServer和MySql的环境搭配好 在组长的帮助下,一步一步测试摸索后终于完成了! 首先是把俩个数据源写在同一个yaml里面 配置完成后再去创建工具类 MySql工具类代码: package com.gl.framework.config; import javax.sql.DataSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springfram.

jf0524aa的博客 4618

Springboot连接两个数据库

一个SpringBoot项目,同时连接两个数据库:比如一个是pgsql数据库,一个是oracle数据库(啥数据库都一样,连接两个同为oracle的数据库,或两个不同的数据库,只需要更改对应的。注意:主数据库不需要加@Transactional(value = "SalverTransactionManager")从数据库需要添加。等即可)注意:连接什么数据库,要引入对应数据库的包。这里一定要创建,不然会报错。...

心之所向博客 7647

SpringBoot项目如何实现同时连接PostgreSQL数据库和Oracal数据库

在appliocation.yml文件中配置两个数据库的信息 spring: datasource: master: type: com.alibaba.druid.pool.DruidDataSource url: jdbc:postgresql://10.157.138.154:5433/cmsdb username: MJSJ pa...

weixin_39730635的博客 1725

Spring boot 同时连接达梦6和达梦7数据库

【代码】Spring boot 同时连接达梦6和达梦7数据库。

qq_39132795的博客 881

spring boot同时连接两个数据库

*注意:**database需要指定主数据库(默认数据库)即master,不然在项目启动时会出现警告;第二个数据库名字随意,你也可以叫cloud1、cloud2…在ServiceImpl中使用注解**@DS(“”)**,表明需要操作哪个数据库。@DS不一定要在ServiceImpl中使用,同样可以在mapper、service接口使用。1. 项目要求同时操作两个数据库,一个在本地服务器,一个在云服务器。2. 两个数据库均为SQL server数据库。

m0_74823434的博客 391

SAP 财务快速记账之—G/L Item Fast Entry

SAP FICO 运维解决方案

lijinbao171022的博客 1647

Springboot同时连接两个数据库

在一些项目中需要同时操作两个数据库,比如定时给数据库做数据同步,将A数据库中的数据复制到B中。 yml配置 spring: datasource: db1: driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=db_EQMSData username: sa ...

普通还不自信的程序员 3992

基于Coze平台从零构建AI智能体:以测试用例生成为例的实战指南

在人工智能技术快速发展的今天,大语言模型(LLM)和提示词工程(Prompt Engineering)已成为构建智能应用的核心技术。其原理在于通过自然语言指令引导模型完成特定任务,其技术价值在于极大地降低了AI应用开发的门槛,使非专业开发者也能快速实现想法。这一技术广泛应用于自动化办公、智能客服、内容生成等场景。本文聚焦于字节跳动旗下的Coze平台,该平台通过可视化工作流编排和预置技能,将上述技术封装为易用的工具。文章以“根据产品需求文档(PRD)自动生成测试用例”这一具体场景为例,详细拆解了从需求分析、工

weixin_30617695的博客 337

Win11实时字幕还能这么玩?手把手教你打造专属‘AI字幕机’,告别视频网站无字幕困扰

本文详细介绍了如何利用Win11的实时字幕功能打造全平台通用的AI字幕系统。通过C#抓取程序、Node.js中转服务和前端展示界面的组合,实现自动抓取系统字幕并实时推送到任意网页视频的方案,有效解决在线视频无字幕的困扰。

weixin_33735077的博客 391

Springboot mybatis-plus同时连接两个数据库

mybatis-plus同时连接两个数据库

tangan007的博客 3376

西门子PLC实战:基于1200/1500的工业物联网MQTT通讯全解析

本文详细解析了如何在西门子S7-1200/1500系列PLC上实现工业物联网MQTT通讯。通过从硬件准备、网络配置到TIA Portal中MQTT_Client功能块的实战编程,手把手指导工程师打通车间数据桥梁,解决信息孤岛问题,实现PLC数据高效上云或设备间互联。

whisky的博客 1090

如何使用springboot同时连接两个不同的数据源操纵数据库

     创建一个springboot项目,在pom.xml文件中导入一些基本的依赖并导入需要连接的两个数据库postgresql,和sqlserver的依赖。在application-dev.properties配置文件中配置两个数据库的连接信息。               使用@Configuration注解创建一个数据源配置类,在此类上使用@PropertiesSource注解寻找这个数据...

ly的博客 6万+

Ovito隐藏技巧:用Expression Selection快速提取分子链(附模糊背景配置参数)

本文详细介绍了Ovito软件中Expression Selection功能的隐藏技巧,用于从复杂的分子动力学模拟数据中快速、精准地提取目标分子链。通过结合Expand Selection和Invert Selection等修饰器,形成一套高效的工作流,并深入解析了实现SCI论文级渲染效果的景深模糊参数配置,帮助研究者大幅提升数据处理与图片生成效率。

pz890123的博客 867

系统设计---算法与架构

这片文章对系统设计的具体步骤及相关知识进行介绍,主要分为四部分:算法设计、IC系统架构设计、基于systemC的IC系统设计、系统设计工具SPW简介。 (一)算法设计 系统设计的第一步是给出清晰的系统规范,该规范写明了系统的功能、性能、费用、开发时间等。接下来创建一个系统行为模型,并且可以用来初步验证设计的性能。再下来,对行为模型进行细化,即进行算法设计。算法设计大致分为三步: 1)给出浮点

正在努力的ICer的博客 4373

jpa 连接多个mysql 数据库_Spring boot通过JPA和Mybatis同时连接2个关系数据库的例子...

最近在研究的Spring-Boot 是一个非常不错的框架,可以和很多Spring家族的其他框架结合,实现快速开发Production-Ready的程序,但是一般网上都是用JPA作为数据库的主要操作方式,常用Mybatis比较少自己写了一个通过Spring-Data-JPA和MyBatis同时连接2种数据库的例子,供大家参考,】如果有更好的实现方式,也请赐教,谢谢项目地址:#spring-boot-...

weixin_30974373的博客 322

服务器被矿工入侵记录

一次服务器被矿工入驻的处理记录

王瑞的技术专栏 1333

SpringBoot + MyBatis配置连接MySQL、SQL Server、Oracle数据库_springboot 同时连接sql server与oracle

(3)mybatis(4)alibaba 数据连接池(5)mysql 驱动(6)sqlserver 驱动(7)Oracle数据库驱动(8)lombok主要用来记录日志(9)tomcat。

2401_86963909的博客 1274

手把手教你ensp仿真搭建校园网(含防火墙及无线网络)系列(二)校园网接入层交换机配置

本系列博客将带你从零开始,使用 华为 eNSP(Enterprise Network Simulation Platform) 仿真搭建一个完整的校园网络,涵盖 核心层、汇聚层、接入层、防火墙安全策略、无线AC+AP组网 等实战场景。无论你是网络初学者还是希望深化实战经验的工程师,都能通过本教程掌握企业级网络的规划、配置与排错技巧。

echo的博客 1219

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

SpringBoot配置双数据源(一个项目同时连接操作两台数据库)

前言: 近期公司要上线3.0版本,需要将2.0的数据迁移到3.0中继续沿用,由于3.0的数据库相比2.0.的数据库改动很大,最主要的是2.0数据库的主键为自然数自增主键,而3.0数据库的主键为UUID2,所以只能使用程序动态迁移! 声明: 本教程使用的持久化框架为JPA,所以数据源也是基于JPA。采用的是SpringBoot2 + SpringDataJPA + MySQL + 双数据源! ...

炸鸡小子的博客 6万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Spring boot通过JPA和Mybatis同时连接2个关系数据库的例子

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34303897的博客 237

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

上一篇: Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedded datasource could
下一篇: SpringBoot 错误: 找不到或无法加载主类
dadeity
博客等级 码龄10年 1172粉丝 225原创
评论 19
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dadeity

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值