Spring Boot2.0之整合多数据源

springboot 2.0 整合mybatis 多数据源(完整版) 本项目的多数据源整合思路是根据分包进行处理的,即使用不同的数据源业务放在不同的包下面:项目目录结构如下(一共两个数据源分别是test和user):pom.xml:<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://w... 阅读详情

Spring Boot2.0之整合多数据源

 

一般公司分两个数据库:

 一个放共同配置文件, 一个数据库垂直业务数据库

垂直拆分和水平拆分:

  垂直是根据业务划分具体数据库 

 

在一个项目中有多个数据源(不同库jdbc) 无限个的哈~ 根据包名 或者 注解方式 划分多个数据源

 本博客讲解的是分包情况下的:

首先创建两个包 

   

数据库也是如此:

  

当前的目录结构这样:

 

 

根据不同的包名字,连接不同的数据源

pom文件如下所示:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>multipleDatasource</groupId>
  <artifactId>com.toov5.multiple</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.0.RELEASE</version>
	</parent>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>
		<!-- 测试 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.1.1</version>
		</dependency>
		<!-- mysql 依赖 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
		<!-- springboot-web组件 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		      <dependency>
              <groupId>org.projectlombok</groupId>
               <artifactId>lombok</artifactId>
       </dependency>
		
		
	</dependencies>
  
</project>

 数据源的配置文件:application.properties

 

###datasource1
spring.datasource.test1.driver-class-name = com.mysql.jdbc.Driver
spring.datasource.test1.jdbc-url = jdbc:mysql://localhost:3306/test01?useUnicode=true&characterEncoding=utf-8
spring.datasource.test1.username = root
spring.datasource.test1.password = root
###datasource2
spring.datasource.test2.driver-class-name = com.mysql.jdbc.Driver
spring.datasource.test2.jdbc-url = jdbc:mysql://localhost:3306/test02?useUnicode=true&characterEncoding=utf-8
spring.datasource.test2.username = root
spring.datasource.test2.password = root

datasource包下面的相关配置的Java代码:

package com.toov5.datasource;

import javax.sql.DataSource;

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.jdbc.datasource.DataSourceTransactionManager;

//DataSource01数据源的读取
@Configuration // 注册到springboot容器中  
@MapperScan(basePackages = "com.toov5.test01", sqlSessionFactoryRef = "test1SqlSessionFactory") 
//指向了下面的名为 test1SqlSessionFactory 的工厂
public class DataSource1Config {

    @Bean(name = "test1DataSource")  //表示注入到Spring 容器中去
    @ConfigurationProperties(prefix = "spring.datasource.test1")  //表以此为开头,去properties去读 ( 后面是写死的)
    @Primary
    public DataSource testDataSource() {
        return DataSourceBuilder.create().build();
    }

    
    @Bean(name = "test1SqlSessionFactory") // 
    @Primary
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("test1DataSource") DataSource dataSource)
            throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        // bean.setMapperLocations(
        // new
        // PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/test1/*.xml"));
        // 如果有一些mapper文件的话 可以把上面的注解放开
        return bean.getObject();
    }

    
    @Bean(name = "test1TransactionManager")  //配置事务
    @Primary
    public DataSourceTransactionManager testTransactionManager(@Qualifier("test1DataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "test1SqlSessionTemplate")
    @Primary
    public SqlSessionTemplate testSqlSessionTemplate(
            @Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}

和

package com.toov5.datasource;

import javax.sql.DataSource;

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.jdbc.datasource.DataSourceTransactionManager;

 //DataSource2
@Configuration // 注册到springboot容器中
@MapperScan(basePackages = "com.toov5.test02", sqlSessionFactoryRef = "test2SqlSessionFactory")
public class DataSource2Config {

    
    @Bean(name = "test2DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.test2")
    public DataSource testDataSource() {
        return DataSourceBuilder.create().build();
    }

    
    @Bean(name = "test2SqlSessionFactory")
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("test2DataSource") DataSource dataSource)
            throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        // bean.setMapperLocations(
        // new
        // PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/test2/*.xml"));
        return bean.getObject();
    }

    
    @Bean(name = "test2TransactionManager")
    public DataSourceTransactionManager testTransactionManager(@Qualifier("test2DataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "test2SqlSessionTemplate")
    public SqlSessionTemplate testSqlSessionTemplate(
            @Qualifier("test2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}

然后相应的实体类代码:

package com.toov5.entity;

import lombok.Data;

@Data  
public class User {
  private Integer age;
  private String name;
  private  Integer id;
    
}

mappertest01和mappertest02

package com.toov5.mappertest01;

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;

public interface UserMapperTest01 {
    @Insert("insert into users values(null,#{name},#{age});")
    public int insert(@Param("name") String name, @Param("age") Integer age);

}

和

package com.toov5.mappertest02;

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;

public interface UserMapperTest02 {
    @Insert("insert into users values(null,#{name},#{age});")
    public int insert(@Param("name") String name, @Param("age") Integer age);

}

service01和service02

package com.toov5.service01;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.toov5.mappertest01.UserMapperTest01;

import lombok.extern.slf4j.Slf4j;

@Service
@Slf4j
public class UserService01 {
  @Autowired
  private UserMapperTest01 userMapperTest01;
  
  public int insertUser(String name, Integer age){
     int result = userMapperTest01.insert(name, age);
      log.info("####################",result);
      return result;
  }
}

和

package com.toov5.service02;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.toov5.mappertest02.UserMapperTest02;

import lombok.extern.slf4j.Slf4j;

@Service
@Slf4j
public class UserService02 {
  @Autowired
  private UserMapperTest02 userMapperTest02;
  
  public int insertUser(String name, Integer age){
     int result = userMapperTest02.insert(name, age);
      log.info("####################",result);
      return result;
  }
}

 controller类

package com.toov5.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.toov5.test01.service01.UserService01;

@RestController
public class MultiplyController {
    @Autowired
    private UserService01 userService01;
    
    @Autowired
    private UserService01 userService02;
    
    @RequestMapping("/insertUser01")
    public Integer insertUser1(String name, Integer age){
        return userService01.insertUser(name, age);
    }
    
    @RequestMapping("/insertUser02")
    public Integer insertUser2(String name, Integer age){
        return userService02.insertUser(name, age);
    }
    
}

启动类:

package com.toov5.app;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication(scanBasePackages={"com.toov5.*"})
public class app {

    public static void main(String[] args) {
        SpringApplication.run(app.class, args);
    }
    
}

 

 启动后访问:

数据库:

 

 访问:

数据库结果:

注:spring1.5时候 默认只想数据源 会报错~    2.0之后得到了修复

 

posted @ 2018-10-20 01:02 toov5 阅读( ...) 评论( ...) 编辑 收藏
Spring Boot 3.x 多数据源整合 Druid:3 种配置方案对比与性能实测 本文详细对比了Spring Boot 3.x整合Druid多数据源的三种配置方案(YAML、编程式、混合),并通过性能测试数据提供选型建议。重点分析了Druid连接池在多数据源场景下的优势,包括完善的监控功能和SQL防火墙支持,帮助开发者高效管理企业级应用中的复杂数据源需求。 阅读详情

相关推荐

spring boot 2.0 快速入门

spring boot快速入门 一、Spring Boot 2.0入门 文章目录一、Spring Boot 2.0入门1、介绍Spring Boot2、使用IDEA Spring Initializer快速创建Spring Boot项目![在这里插入图片描述](https://img-blog.csdnimg.cn/20200716001555414.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aH

Berwin的博客 877

spring boot2.0连接多数据源

1、附项目目录结构图2、pom文件添加依赖&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http

week_ed的专栏 2193

Spring Boot整合MyBatis多数据源

Spring Boot整合MyBatis多数据源   对于Spring Boot 整合JdbcTemplate多数据源,此方式相对比较复杂一些,没有整合JdbcTemplate多数据源相对简单一些,但此方式也是一种技术,我们也是要掌握的。 创建工程 首先我们需要创建一个Spring Boot 项目工程,并且添加Mybatis、Mysql以及web的相关依赖: 创建好项目后,由于我们每个人的数据库...

知性人 -- 的博客 2726

SpringBoot2.0之八 多数据源配置

  在开发的过程中我们可能都会遇到对接公司其他系统等需求,对于外部的系统可以采用接口对接的方式,对于一个公司开发的两个系统,并且知道相关数据库结构的情况下,就可以考虑使用多数据源来解决这个问题。SpringBoot为我们提供了相对简单的实现。 一、建立如下结构的maven项目 二、添加相关数据库配置信息 server: port: 8080 spring: datasour...

明天的地平线 2万+

Spring Boot整合Druid与Dynamic-Datasource多数据源配置:从错误到完美解决

摘要:本文分析了Spring Boot 2.7整合Druid连接池和Dynamic-Datasource时出现的DataSource returned null from getConnection()错误。主要原因为自动配置冲突、连接池类型未指定、多数据源配置错误。解决方案包含五个关键步骤:1)排除HikariCP和Druid自动配置;2)正确配置application.yml文件;3)删除手动创建的DataSource Bean;4)确保@DS注解与配置一致;5)处理跨数据源事务。通过调整依赖关系和配置

weixin_45131680的博客 2023

springboot-整合多数据源配置

主要介绍两种整合方式,分别是 springboot+mybatis 使用分包方式整合,和 springboot+druid+mybatisplus 使用注解方式整合。

欢迎朋友,我是一名十多年开发经验的新手,希望多多指教。 1200

SpringBoot2.0 jpa多数据源配置

随着Springboot升级到2.0,原来1.5.x的Jpa多数据源配置不能用了。现在总结一下Springboot2.0的jpa多数据源配置 连接池还是用druid,但是不能用druid的starter了,譬如在1.5.x时用的是 &lt;dependency&gt; &lt;groupId&gt;com.alibaba&lt;/groupId&gt; &lt;artifa...

tianyaleixiaowu的专栏 3万+

Keysight ADS新手必看:3分钟搞定TDR模拟的保姆级教程(附差分信号设置技巧)

本文为Keysight ADS新手提供TDR模拟的保姆级教程,详细介绍了从基础环境准备到差分信号设置的全流程。通过内置模板调用、待测器件连接和仿真结果解读,帮助用户快速掌握TDR模拟技术,特别包含差分信号配置技巧,提升信号完整性分析效率。

weixin_30872157的博客 196

Spring Boot 2.0 多数据源编程

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

weixin_34211761的博客 177

MACS2软件进行Peak calling

MACS2可以检出ChIP-Seq,ATAC-seq 以及 MeRIP-seq (RNA甲基化测序) 等富集的序列。peaks calling 有不同的方法,MACS2是最常用的call peaks工具。 MACS全称Model-based Analysis of ChIP-Seq,最初的设计是用来鉴定转录因子的结合位点,但是它也可以用于其他类型的富集方式测序。usage: macs2 [-h] [--version] {callpeak,bdgpeakcall,bdgbroadca

qq_27390023的博客 3789

在天问block环境下LU-ASR01与51单片机的基础运用

正确步骤将模块和电脑连接后,仍然显示未连接(如4.1中图片中的编译下载后面显示未连接),可以尝试关闭软件后尝试,如果仍然不行换一条type-c线再试;以上方式都不行,可能要怀疑ASR01硬件损坏,跟商家联系!!!

BUG7073的博客 1万+

Spring Boot 2.0整合Druid连接池:监控配置、多数据源与生产环境调优实战

数据库连接池是Java Web应用中管理数据库连接、保障性能与稳定性的核心组件。其原理是通过预先建立并维护一定数量的数据库连接,避免频繁创建和销毁连接带来的开销,从而提升数据访问效率。在微服务与高并发场景下,一个具备监控能力的连接池对于诊断慢SQL、防止连接泄露、优化数据库访问模式具有重要技术价值。Druid作为阿里巴巴开源的高性能连接池,深度融合了连接管理与监控功能,提供了SQL防火墙、Web可视化控制台等特性,广泛应用于需要对数据访问层进行深度可观测的Spring Boot项目中。本文聚焦于Spring

weixin_33691700的博客 341

[华为]华为无线控制器AC6508简单配置实例

用户需求:3个地址段,分别是领导、员工、访客,访问控制策略是只允许访客上网,不允许访客访问内网。 vlan173为设备的管理地址和AP获取的地址,领导、员工、访客的vlan分别是vlan131/vlan132/vlan133 首先是许可的下载,使用华为的账号登陆http://app.huawei.com/isdp ,然后按照说明输入许可,下载许可,将许可导入到设备。 web界面访问后,直接按照配置向导配置就可以了。 1.基本配置里主要配置license、设备名称、设备时间 2.端口配置:连接上

日子_很简单 2万+

spring boot2.0+shiro+mybatis多数据源+druid连接池项目整合

首先感谢纯洁的微笑大神的springboot教程,本项目很多地方都是参考写出,贴出大神自己建立的学习网站http://www.ityouknow.com/spring-boot.html   关于整合    网上关于springboot2.0和shiro+myabtis整合的案例很少,大神的教程也是用jpa编写,jpa很方便,但是还有很多人用mybatis,加之刚学习完mybatis多数据源...

z642385985的博客 3911

别再为OpenBCI_GUI安装发愁了!保姆级教程带你从Processing配置到成功运行(附常见错误解决)

本文提供了一份详细的OpenBCI_GUI安装教程,涵盖从Processing配置到成功运行的全过程,特别针对常见错误提供了解决方案。通过环境搭建、软件依赖安装、源码处理及首次运行实战,帮助用户高效完成数据可视化工具的部署与使用。

weixin_28366475的博客 269

基于STM32的智能台灯PWM调光与人体感应融合设计

本文详细介绍了基于STM32单片机的智能台灯设计方案,重点讲解了PWM调光技术与人体感应模块的融合实现。通过STM32的高级定时器产生精准PWM信号控制LED亮度,结合红外传感器实现人来灯亮、人走灯灭的智能体验,同时集成光敏传感实现环境自适应调光,打造高效节能的智能照明解决方案。

threejs5artist的博客 824

SpringBoot2.0+与Mybatis-puls整合多数据源(dynamic-datasource-spring-boot-starter)

SpringBoot2.0+与Mybatis-puls整合多数据源(dynamic-datasource-spring-boot-starter)写在前面代码实现部分如下首先贴出我们的entity,Service,1.不用Druid的情况下2.看结果Druid的情况下2.看结果 写在前面 在我们的项目中不可避免有时候和第三方对接中需要接入多数据源,一般来讲我们大多数是采用AOP方式去动态的调整数据...

乌鸦东南飞 1万+

RT-DETR改进前必看 - Ultralytics调参 1:1还原RT-DETR官方版本实验环境,更方便改进

的项目文件中集成了YOLOv3v5v6v8v9v10rt-detr11以及其中不同大小的模型结构,更方便我们学习和使用。的参数配置在路径下,其中中设置了模型在训练Train验证Val/Test预测Predict可视化Visualize导出Export超参数Hyperparameters、以及跟踪Tracker的相关参数。在调参过程中主要涉及训练Train和超参数Hyperparameters。下面主要介绍一下初始超参数Hyperparameters。

Limiiiing的博客 7962

基于C++的非线性方程的解法研究及实现

【基于C++的非线性方程的解法研究及实现】 【前言】 关于非线性方程f(x) = 0的根的解法目前分为三类,二分法,试值法和不动点迭代法 本文实例为寻找f(x) = x2 - 2x在区间[-1, 3]内精度在0.05以内的实根 代码中的set用于保存答案 【1.二分法】 二分法又称二分区间法,是求解非线性方程近似根的一种常用的简单方法。 算法: 【代码实现】 inline float f(fl...

weixin_44211980的博客 1956

【CANoe】CAPL_ECU上电后首帧报文发出时间检测

【CANoe】CAPL_ECU上电后首帧报文发出时间检测,通过CANoe I/O口检测电压实现

星Yeah 的博客 2509

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

spring boot 2.0.1版本,多数据源支持

有时候我们需要在程序中加载多个数据源,用spring jpa可以实现,网上有许多资料,要指定哪个包下面的类使用哪个数据源,个人觉得这种方式不够灵活,不是我想要的。我是想通过多个jdbcTemplate的实例,不同实例操作不同的数据源,甚至不同的实例操作同一类路径的实体对象。下面记录下,实现加载读写分离两个数据源的过程。 pom文件如下: &lt;parent&gt; &lt;gro...

breezylee09的专栏 432

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

spring boot(2):activiti整合

原创不易,注明出处。简单介绍activiti基于apcahe开源协议的业务流程管理(BPM)引擎,引擎的核心目标是采用人工和系统调用组成的流程定义,并按一定顺序执行这些流程定义。activiti是一个轻量级的框架,但它可以在任何规模下工作,可执行几十到几千甚至百万个流程。activiti的开源地址:https://github.com/Activiti/Activiti ,各位小伙伴们可以前往下...

weixin_30260399的博客 163

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

spring boot整合mybatis通用mapper实现Druid多数据源

springboot加通用mapper实现Druid多数据源

LMS的专栏 7600

spring-boot和JPA多数据源整合

今天弄一下spring-boot和jpa的多数据源整合 Jpa(Java Persistence API)Java持久化API,它是一套ORM规范 只是一套规范 Spring Boot中使用的Jpa实际上是Spring Data Jpa,Spring Data是Spring家族的一个子项目,用于简化SQL和NoSQL的访问,在Spring Data中,只要你的方法名称符合规范,它就知道你想干嘛,不...

sssyyyy7的博客 1万+

【Spring Boot】Spring Boot整合多数据源

在实际的开发工作中,我们经常会遇到需要整合多个数据源的情况,比如同时连接多个数据库、读写分离、跨数据库查询等。本文将介绍如何使用Spring Boot来实现多数据源的整合,对于刚刚接触开发的小伙伴可能有一些帮助。在一个应用程序中使用多个数据源意味着我们需要在不同的数据源之间进行切换,以便从不同的数据源中获取数据。多数据源可以是关系数据库、NoSQL 数据库、平面文件、XML 文件等。在一个应用程序中使用多数据源的好处是,我们可以根据应用程序的需求选择最合适的数据源,从而提高应用程序的性能和可扩展性。

DreamSun的博客 2525
上一篇: Spring Boot2.0之整合事物管理
下一篇: Spring Boot2.0之多数据源事务管理
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值