Spring Boot 项目中多数据源配置使用场景

论文浅读之PIP-Net: Patch-Based Intuitive Prototypes for Interpretable Image Classification 这篇文章的主要贡献包括:1 提出了一种新型的可解释图像分类模型PIP-Net,它基于原型部分学习可解释的原型,实现内置解释性。2 PIP-Net采用自监督学习的新正则化方法,学习原型之间的相似性,使得 latent 空间中的相似性能更好地与人类视觉感知相一致,从而减小了所谓的语义差距。3 PIP-Net可解释为一个稀疏的打分表,它可以检测图像是否属于任何类,或是否属于多个类。它也可以对OOD数据进行分类并说“我没有看到过这个”。 阅读详情

在 Spring Boot 中配置多数据源是一个非常常见的需求,主要用于以下场景:

  • 读写分离:一个主数据库(Master)负责写操作,一个或多个从数据库(Slave)负责读操作,以提高性能和可用性。
  • 业务拆分:不同的业务模块使用不同的数据库(例如,用户库、订单库、商品库)。
  • 连接异构数据库:同时连接 MySQL、PostgreSQL 等不同类型的数据库。

下面我将详细介绍两种主流的实现方式:

  1. 静态方式(推荐用于业务隔离场景):通过包路径区分不同的数据源,配置简单,结构清晰。
  2. 动态方式(推荐用于读写分离场景):使用 AOP 和自定义注解,在方法级别动态切换数据源,更灵活。

方案一:静态方式(按包路径隔离)

这种方式的核心思想是为每个数据源创建一套独立的配置(DataSource, SqlSessionFactory, TransactionManager),并使用 @MapperScan 注解扫描不同包路径下的 Mapper 接口,将它们绑定到对应的数据源上。

1. 添加依赖 (pom.xml)

确保有以下依赖。通常 Spring Boot Starter 会包含大部分。

<dependencies>
    <!-- Spring Boot Web Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- MyBatis-Plus Starter -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.5.3.1</version> <!-- 请使用较新版本 -->
    </dependency>
    <!-- MySQL Driver -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <!-- Connection Pool (HikariCP is default) -->
    <dependency>
        <groupId>com.zaxxer</groupId>
        <artifactId>HikariCP</artifactId>
    </dependency>
</dependencies>
2. 配置文件 (application.yml)

为不同的数据源定义各自的连接信息,并用不同的前缀区分。

spring:
  datasource:
    # 主数据源配置 (master)
    master:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/db_master?serverTimezone=UTC
      username: root
      password: your_password
      type: com.zaxxer.hikari.HikariDataSource # 指定连接池类型

    # 从数据源配置 (slave)
    slave:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3307/db_slave?serverTimezone=UTC
      username: root
      password: your_password
      type: com.zaxxer.hikari.HikariDataSource
3. 创建数据源配置类

为每个数据源创建一个 Java 配置类。

主数据源配置 (MasterDataSourceConfig.java)

package com.example.config.datasource;

import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
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;
import javax.sql.DataSource;

@Configuration
// 扫描 Master 库的 Mapper 接口
@MapperScan(basePackages = "com.example.mapper.master", sqlSessionTemplateRef = "masterSqlSessionTemplate")
public class MasterDataSourceConfig {

    @Bean(name = "masterDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.master")
    @Primary // 标记为主数据源
    public DataSource masterDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "masterSqlSessionFactory")
    @Primary
    public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception {
        MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        // 如果有 XML 文件,指定位置
        // bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/master/*.xml"));
        return bean.getObject();
    }

    @Bean(name = "masterTransactionManager")
    @Primary
    public DataSourceTransactionManager masterTransactionManager(@Qualifier("masterDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "masterSqlSessionTemplate")
    @Primary
    public SqlSessionTemplate masterSqlSessionTemplate(@Qualifier("masterSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

从数据源配置 (SlaveDataSourceConfig.java)

package com.example.config.datasource;

import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
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.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;

@Configuration
// 扫描 Slave 库的 Mapper 接口
@MapperScan(basePackages = "com.example.mapper.slave", sqlSessionTemplateRef = "slaveSqlSessionTemplate")
public class SlaveDataSourceConfig {

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

    @Bean(name = "slaveSqlSessionFactory")
    public SqlSessionFactory slaveSqlSessionFactory(@Qualifier("slaveDataSource") DataSource dataSource) throws Exception {
        MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        // bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/slave/*.xml"));
        return bean.getObject();
    }

    @Bean(name = "slaveTransactionManager")
    public DataSourceTransactionManager slaveTransactionManager(@Qualifier("slaveDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "slaveSqlSessionTemplate")
    public SqlSessionTemplate slaveSqlSessionTemplate(@Qualifier("slaveSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}
4. 创建 Mapper 接口

将不同数据源的 Mapper 接口放到各自的包下。

  • com.example.mapper.master -> UserMasterMapper.java
  • com.example.mapper.slave -> OrderSlaveMapper.java
5. 使用

现在你可以在 Service 中直接注入并使用对应的 Mapper,Spring 会自动为它们关联正确的数据源。

@Service
public class MyService {
    @Autowired
    private UserMasterMapper userMasterMapper; // 操作 master 库

    @Autowired
    private OrderSlaveMapper orderSlaveMapper; // 操作 slave 库

    public void doSomething() {
        // ...
        userMasterMapper.insert(someUser); // 写入主库
        Order order = orderSlaveMapper.selectById(1); // 从从库读取
    }
}

优点:配置隔离,结构非常清晰,不会混淆。
缺点:如果一个 Service 方法需要同时操作两个库,代码会稍微复杂,且默认的 @Transactional 不能跨数据源生效。


方案二:动态方式(AOP + 自定义注解)

这种方式更灵活,适用于读写分离等需要在同一个 Service 中切换数据源的场景。

1. 配置文件 (application.yml)

与方案一相同。

2. 创建自定义注解

创建一个注解,用于标记方法应该使用哪个数据源。

package com.example.config.dynamic;

import java.lang.annotation.*;

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DataSource {
    String value() default "master"; // 默认使用 master 数据源
}
3. 创建数据源上下文持有者

使用 ThreadLocal 来存储当前线程需要使用的数据源 Key。

package com.example.config.dynamic;

public class DataSourceContextHolder {
    private static final ThreadLocal<String> CONTEXT_HOLDER = new ThreadLocal<>();

    public static void setDataSourceKey(String key) {
        CONTEXT_HOLDER.set(key);
    }

    public static String getDataSourceKey() {
        return CONTEXT_HOLDER.get();
    }

    public static void clearDataSourceKey() {
        CONTEXT_HOLDER.remove();
    }
}
4. 创建动态数据源类

继承 AbstractRoutingDataSource,重写 determineCurrentLookupKey 方法,从 DataSourceContextHolder 获取当前数据源 Key。

package com.example.config.dynamic;

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

public class DynamicDataSource extends AbstractRoutingDataSource {
    @Override
    protected Object determineCurrentLookupKey() {
        return DataSourceContextHolder.getDataSourceKey();
    }
}
5. 创建AOP切面

创建一个切面,拦截 @DataSource 注解,在方法执行前设置数据源 Key,在方法执行后清除它。

package com.example.config.dynamic;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

import java.lang.reflect.Method;

@Aspect
@Component
@Order(1) // 保证该AOP在@Transactional之前执行
public class DataSourceAspect {

    @Pointcut("@annotation(com.example.config.dynamic.DataSource)")
    public void dsPointCut() {}

    @Around("dsPointCut()")
    public Object around(ProceedingJoinPoint point) throws Throwable {
        MethodSignature signature = (MethodSignature) point.getSignature();
        Method method = signature.getMethod();
        DataSource dataSource = method.getAnnotation(DataSource.class);
        
        // 设置数据源
        if (dataSource != null) {
            DataSourceContextHolder.setDataSourceKey(dataSource.value());
        }

        try {
            return point.proceed();
        } finally {
            // 清除数据源,防止内存泄漏
            DataSourceContextHolder.clearDataSourceKey();
        }
    }
}
6. 整合数据源配置

创建一个统一的配置类来管理所有数据源。

package com.example.config;

import com.example.config.dynamic.DynamicDataSource;
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 javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;

@Configuration
public class DynamicDataSourceConfig {

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

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

    @Bean
    @Primary // 必须!将动态数据源设置为主数据源
    public DynamicDataSource dataSource(DataSource masterDataSource, DataSource slaveDataSource) {
        Map<Object, Object> targetDataSources = new HashMap<>();
        targetDataSources.put("master", masterDataSource);
        targetDataSources.put("slave", slaveDataSource);

        DynamicDataSource dynamicDataSource = new DynamicDataSource();
        dynamicDataSource.setTargetDataSources(targetDataSources);
        dynamicDataSource.setDefaultTargetDataSource(masterDataSource); // 设置默认数据源
        return dynamicDataSource;
    }
}

注意:这种方式下,SqlSessionFactory 和 TransactionManager 只需要配置一个,并让它们使用这个 @Primary 的 DynamicDataSource 即可。Spring Boot 会自动配置好。

7. 使用

在 Service 方法上添加 @DataSource 注解来切换数据源。

@Service
public class ProductService {

    @Autowired
    private ProductMapper productMapper;

    // 默认不加注解,使用 master 数据源(因为我们配置了默认值)
    @Transactional // 事务仍然有效
    public void addProduct(Product product) {
        productMapper.insert(product);
    }

    // 显式指定使用 slave 数据源
    @DataSource("slave")
    public Product getProductById(Integer id) {
        return productMapper.selectById(id);
    }
}

重要提醒:关于事务

  • 单数据源事务:在以上两种方案中,只要 DataSourceTransactionManager 与 SqlSessionFactory 绑定的是同一个 DataSource,@Transactional 注解就能正常工作。在动态方案中,事务管理器绑定的是 DynamicDataSource,它能确保事务在当前线程选择的数据源上生效。
  • 跨数据源事务(分布式事务):标准的 @Transactional 无法管理跨多个数据源的事务。如果你需要在同一个方法中对 master 和 slave 都进行写操作,并保证它们的原子性,你需要引入 JTA(Java Transaction API)事务管理器,例如 Atomikos 或 Narayana。这会增加配置的复杂度。

总结

  • 如果你的业务模块和数据库绑定关系固定,方案一(静态方式) 更简单、更直观。
  • 如果你需要实现读写分离,或者在业务逻辑中频繁切换数据源,方案二(动态方式) 提供了更高的灵活性。
逆变器LCL滤波器参数设计(一) 1.基本介绍 并网型逆变器一般是电流源逆变器,滤波器基本用LCL结构。 假设要设计额定功率10KVA的单相逆变器,采用两电平的全桥拓扑,采用SPWM控制,载波频率20KHz,电网等级220V,频率50Hz。 拓扑结构如图所示: 直流输入电压分为上下母线各1/2Vin,半母线电压为380V。 L1采用高频磁芯绕制,称为高频电感;L2用工频电感绕制,称工频电感;C是滤波电容,为高频谐波电流提供通路;Vg为电网电压。 载波调制比为:Mr=220*1.414/380=0.819 2.高频电感量的计算 逆变器可以等 阅读详情

相关推荐

cs188Inference in Bayes Nets(贝叶斯网络的推理)

cs188Inference in Bayes Nets贝叶斯网络的推理Question1(3 points):Bayes Net StructureQuestion2(1 points):Bayes Net ProbabilitiesQuestion 3(5 points):Join FactorsQuestion4(4 points):EliminateQuestion5(4 points):NormalizeQuestion 6(4 points):Variable EliminationQuesti

weixin_46582817的博客 1673

springboot配置多个数据源(两种方式)

在我们的实际业务中可能会遇到;在一个项目里面读取多个数据库的数据来进行展示,spring对同时配置多个数据源是支持的。 本文中将展示两种方法来实现这个功能。 springboot+mybatis 第一种方式: 在配置文件中配置多个数据源,然后通过配置类来获取数据源以及mapper相关的扫描配置 pom.xml &lt;parent&gt; &lt;groupId&gt;org.s...

qq_38058332的博客 10万+

模板匹配加速之金字塔分层搜索

图像金字塔是一种多分辨率图像表示方法,它通过一系列逐渐缩小或放大的图像来表示原始图像的不同尺度。高斯金字塔(Gaussian Pyramid):通过不断下采样(降采样)生成更小的图像。拉普拉斯金字塔(Laplacian Pyramid):通过高斯金字塔和差分操作生成一组残差图像。在模板匹配中,我们主要使用高斯金字塔来实现多尺度匹配。金字塔灰度模板匹配通过多尺度搜索策略,在保持较高准确率的同时显著提升匹配速度,尤其适用于:高分辨率图像处理实时检测系统移动端设备等资源受限场景。

weixin_44969144的博客 1732

Spring Boot 优雅配置多数据源

最常见的单一应用中最多涉及到一个数据库,即是一个数据源(Datasource那么顾名思义,多数据源就是在一个单一应用中涉及到了两个及以上的数据库了。urlusernamepassword这三个属性已经唯一确定了一个数据库了,DataSource则是依赖这三个创建出来的。则多数据源即是配置多个DataSource(暂且这么理解)。动态数据源简单的说就是能够自由切换的数据源,类似于一个动态路由的感觉,Spring 提供了一个抽象类是一个Map结构,所有需要切换的数据源都存放在其中,根据指定的。

程序员高级码农的博客 2303

SPAD 单光子雪崩二极管

SPAD,全称为,是一种高灵敏度的光电探测器件,能够在非常低的光照水平下检测单个光子。SPAD在工作时,当一个光子被探测器吸收后,能够触发一个雪崩效应,产生一个可以被检测到的电信号。

qq_42786033的博客 1万+

暑期实习前端面试笔试总结汇总

腾讯2020暑期实习——前端视频面试(1)回顾 腾讯2020暑期实习——前端视频面试(2)回顾 腾讯2020暑期实习——前端视频面试(3)回顾 腾讯2020暑期实习——前端视频面试(4)回顾 蘑菇街2020暑期实习——前端视频面试回顾 二、笔试 奇安信前端实习笔试总结 vivo笔试(2020年3月8日) ...

明媚 3065

一文读懂Spring动态配置多数据源---源码详细分析

Spring动态多数据源源码分析及解读 一、为什么要研究Spring动态多数据源代云小说网 https://www.3187.info ​ 期初,最开始的原因是:想将答题服务中发送主观题答题数据给批改中间件这块抽象出来, 但这块主要使用的是mq消息的方式发送到批改中间件,所以,最后决定将mq进行抽象,抽象后的结果是:语文,英语,通用任务都能个性化的配置mq,且可以扩展到任何使用mq的业务场景上。终端需要做的就是增加mq配置,自定义消费者业务逻辑方法,调用send方法即可。 ​ 这样.

damimi00的博客 3615

Python 爬虫实战:华尔街见闻精选文章爬取(反反爬 + 投资情绪分析)

Python 爬虫实战:华尔街见闻精选文章爬取(反反爬 + 投资情绪分析)

yansideyucsdn的博客 969

【SpringBoot】多数据源N种实现详解

1、SpringBoot+MyBatis整合多数据源 2、SpringBoot+MyBatis-Plus整合多数据源 3,AbstractRoutingDataSource+AOP实现多数据源 4,JdbcTemplate 实现多数据源整合

精益求精 8953

【2025年美团春招(算法岗)-3月15日-第三题(300分)- 字符串权值】(题目+思路+Java&C++&Python解析+在线测试)

小美定义一个字符串的权值为:其长度为3的回文子序列数量。例如,“abca"的权值为2,因为包含两个回文子序列"aba"和"aca现在给定一个仅包含小写字母的字符串,小美希望你输出该字符串每个前缀的权值。

m0_73659489的博客 312

手把手教你学 NPU 驱动开发--第一部分:基础准备 开发环境搭建:Linux 内核编译与 NPU 仿真平台配置

摘要:本文详细介绍了搭建Linux内核编译与NPU仿真平台的完整流程。主要内容包括:1) 准备ARM64交叉编译工具链;2) 编译支持KGDB调试的Linux内核;3) 构建最小根文件系统;4) 使用QEMU模拟自定义NPU设备;5) 配置KGDB调试环境。文章重点讲解了如何通过修改设备树添加虚拟NPU设备,并提供了开源NPUIP Gemmini作为实验对象。最后展示了简单的"Hello NPU"驱动验证方法,为后续NPU驱动开发奠定了基础。文中还附有常用命令速查表,方便开发者快速搭建调

MHD0815的博客 382

Spring Boot多数据源切换:三种实现方式详解与实战

本文详细介绍了三种Java多数据源切换方案:AbstractRoutingDataSource、多SqlSessionFactory和dynamic-datasource框架。AbstractRoutingDataSource作为Spring原生方案灵活性高但较复杂;多SqlSessionFactory适合异构数据库但配置繁琐;dynamic-datasource框架功能完善且易于使用,是生产环境首选。文章从实现原理、配置步骤、优缺点对比等方面进行深入分析,并给出性能优化建议和方案选型指导。对于大多数项目,

gorgor在码农 3300

【图像去噪】论文精读:FM2S: Self-Supervised Fluorescence Microscopy Denoising With Single Noisy Image

论文题目:FM2S: Self-Supervised Fluorescence Microscopy Denoising With Single Noisy Image —— FM2S:单噪声图像自监督荧光显微镜去噪arXiv 2024!显微图像去噪!通过可视化详细的细胞结构和生物过程,荧光显微镜具有显着先进的生物学研究。然而,由于难以精确建模固有噪声和获取干净图像进行训练,这种图像去噪任务往往面临挑战,这限制了大多数现有方法。在本文中,我们提出了一种有效的。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 408

Java面试必备:在Spring Boot中实现多数据源配置

在现代企业应用开发中,一个应用需要连接多个数据库的场景越来越常见。Spring Boot提供了灵活的方式来实现多数据源配置,本文将详细介绍如何在Spring Boot项目中配置和使用多个数据源。

qq_58299462的博客 1795

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

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

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

第五节 Spring Boot 整合 Mybatis 实现 Druid 多数据源详解

第五节 Spring Boot 整合 Mybatis 实现 Druid 多数据源详解

2401_89610374的博客 1325

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Spring Boot应用中集成与使用多数据源

通过定义和使用多个数据源,能在Spring Boot应用中实现更复杂的数据管理场景,比如读写分离、数据冗余等。

weixin_42564451的博客 2397

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Spring Boot 配置多数据源【最简单的方式】

看了网上好多关于Spring Boot 配置数据库 多数据源的文章,其实不用那么多重复造轮子,目前已经有了一个特别成熟的开源组件,已经支持各种各样的场景,来满足你多数据源的需求,我大概整理了一下,希望对初学者有用。本文我们使用多数据源组件实现在springboot 项目中快速集成多数据源。支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。支持数据库敏感配置信息 加密 ENC()。支持每个数据库独立初始化表结构schema和数据库database。

日拱一卒无有尽,功不唐捐终入海 1029

Spring Boot系列之多数据源配置

适用场景 当系统业务复杂,并发量较大时,我们都会采取数据库分库,读写分离等,这个时候就需要用到多数据源配置了。多数据源配置方法很多,本文主要介绍Spring Boot整合Mybatis的多数据源配置。 多数据源配置 1,创建一个Spring Boot项目,pom文件引入相关jar包, <dependency> <groupId&g...

baidu_27636661的博客 337

使用 Spring Boot 和 dynamic-datasource 实现多数据源集成

摘要:本文介绍了SpringBoot项目中实现多数据源配置的方法,适用于读写分离、分库分表等场景。通过引入dynamic-datasource依赖,在application.yml中配置master和slave数据源,并使用@DS注解灵活切换数据源。文中提供了完整的配置示例和代码实现,并给出项目源码地址(https://gitee.com/hanyunchuan/spring-boot-dynamic-datasource)供参考。该方法简化了多数据源管理,支持方法级和类级数据源切换。(149字)

韩云川的博客 751

spring boot 集成 dynamic-datasource-spring-boot-starter

在使用多数据源时,为了不再造轮子,就使用 mybatis-plus 中的 dynamic-datasource-spring-boot-starter。现在要讲的是通过 java 代码方式 实现。在非多数据源的项目基础上加集成多数据源。一般集成直接看官网就行。

面朝大海,春暖花开 1002

Spring Boot多数据源极简教程:Dynamic-Datasource入门

而dynamic-datasource-spring-boot-starter这个开源组件,让多数据源配置变得非常简单。在pom.xml中添加dynamic-datasource-spring-boot-starter的核心依赖,同时为了方便演示,我们还引入了H2内存数据库和Spring Boot Web模块。我测试时发现,即使对Spring Boot不是很熟悉,按照这个教程也能快速搭建出可用的多数据源项目。快速生成项目骨架,它内置了Spring Boot项目模板,省去了手动创建的麻烦。

BlackironLynx23的博客 753

【springboot+mybatis】--- springboot + mybatis多数据源配置的正确姿势

文章目录 源码地址:https://github.com/nieandsun/mybatis-study

nrsc 3733

SpringBoot 配置多数据源 dynamic-datasource(多库)

1.Maven 包 <!-- 多数据源配置 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>3.1.1</version> </dependency> 2.配置文件 ###MySQL d

一个java小白的博客 1万+

Mybatis-Plus整合多数据源

提出问题 在平时开发中,经常会遇到在一个项目里需要使用多个数据源的情况,比如有一部分数据在数据源A,另一部分数据在数据源B,业务需要把这两部分的数据做合并然后从接口返回。 又或者操作完数据源A后,需要切换数据源,操作数据源B。这样的需求,怎么实现? 解决问题 其实在mybatis-plus就有相关的实现,是一个基于SpringBoot快速集成多数据源的启动器。 首先要搭建一个springBoot+Mybatis+Mybatis-Plus的项目,搭建项目就不演示了,比较简单。这里讲怎么使用多数据源,

Meiko记录 2787

在Spring Boot中如何实现多数据源配置?

在Spring Boot项目中,实现多数据源配置常见于需要同时访问多个数据库(如主从数据库、不同业务模块使用不同数据库)的场景。

weixin_43521001的博客 593

springboot项目实现多数据源配置使用dynamic-datasource-spring-boot-starter的操作步骤

springboot项目实现多数据源配置使用dynamic-datasource-spring-boot-starter的操作步骤

weixin_45817985的博客 2657
上一篇: Spring IoC 如何实现条件化装配 Bean?
下一篇: python 为什么推荐使用虚拟环境(如 venv)?它解决了什么问题?
冰糖心书房
博客等级 码龄15年 6014粉丝 690原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

冰糖心书房

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

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

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

打赏作者

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

抵扣说明:

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

余额充值