Flyway针对多数据源配置实战方案

article/2025/11/10 6:33:07

Flyway针对多数据源配置实战方案

介绍

这篇文章主要介绍Flyway、Druid和多数据源结合起来如何配置和使用的方案。网上一些文章似乎都没有达到一开始我自己琢磨想要的程度,还是自己琢磨和调试出来了一套方案,欢迎大家斧正。

引入pom文件

首先引入对应的pom文件

<!-- flyway -->
<dependency><groupId>org.flywaydb</groupId><artifactId>flyway-core</artifactId><version>6.4.4</version>
</dependency>
<!--Druid数据库连接池-->
<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.4</version>
</dependency>
<!--多数据源-->
<dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.4.1</version>
</dependency>

application.yml文件配置

spring:autoconfigure:# 排除 Druid 自动配置exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfiguredatasource:# 指定使用 Druid 数据源type: com.alibaba.druid.pool.DruidDataSourcedynamic:datasource:goods:driverClassName: com.mysql.cj.jdbc.Driverurl: username: password: order:driverClassName: com.mysql.cj.jdbc.Driverurl: username: password: seckill:driverClassName: com.mysql.cj.jdbc.Driverurl: username: password: primary: order # 设置默认的数据源或者数据源组,默认值即为masterstrict: true # 严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源druid:# 初始连接数initialSize: 5# 最小连接池数量minIdle: 10# 最大连接池数量maxActive: 20# 配置获取连接等待超时的时间maxWait: 60000# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒timeBetweenEvictionRunsMillis: 60000# 配置一个连接在池中最小生存的时间,单位是毫秒minEvictableIdleTimeMillis: 300000# 配置一个连接在池中最大生存的时间,单位是毫秒maxEvictableIdleTimeMillis: 900000# 配置检测连接是否有效validationQuery: SELECT 1 FROM DUALflyway:enabled: true# 版本更新历史记录表table: t_db_version# 非空数据库初始化Flyway时需要打开此开关进行Baseline操作baseline-on-migrate: true# 是否可以无序执行。开发环境最好开启 outOfOrder, 生产环境关闭 outOfOrderout-of-order: true# 迁移前校验 SQL 文件是否存在问题validate-on-migrate: truelocations: classpath:db/order # 这里写主库路径,然后在配置类中转换

这里的主库为order,从库为goods和seckill。

这里解释下,为什么网上的很多方案都不行的原因就是,如果这里的localtions配置为db或者db/migration这样存在所有flyway版本sql的路径,则最终结果会导致项目跑起来,flysqy会在主库中出现所有其他从库的表和自己主库本该有的表。

所以这里要结合flyway配置类来,配置类代码下面介绍。

项目文件夹结构

展示下项目文件夹结构。
项目文件夹结构图.jpg

Flyway配置类

关于配置类的代码如下。结合上面的图,其实本质就是将application文件的flyway的locations设置为db/order这个主库的路径,让主库只去执行order下的sql文件,然后在配置类中拆解locations,重新组成为db这个路径,然后再组合对应的库的名字。这个方案也是自己调试和探索出来的。

import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.flywaydb.core.Flyway;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;import javax.annotation.PostConstruct;
import javax.sql.DataSource;
import java.util.Map;@Slf4j
@Configuration
@RequiredArgsConstructor
@EnableTransactionManagement
public class FlywayConfig {private final DataSource dataSource;@Value("${spring.flyway.locations}")private String SQL_LOCATION;@Value("${spring.flyway.table}")private String VERSION_TABLE;@Value("${spring.flyway.baseline-on-migrate}")private boolean BASELINE_ON_MIGRATE;@Value("${spring.flyway.out-of-order}")private boolean OUT_OF_ORDER;@Value("${spring.flyway.validate-on-migrate}")private boolean VALIDATE_ON_MIGRATE;@Bean@PostConstructpublic void migrateOrder() {log.info("调用数据库生成工具");SQL_LOCATION = SQL_LOCATION.split("/")[0]; // 将路径转换DynamicRoutingDataSource ds = (DynamicRoutingDataSource) dataSource;Map<String, DataSource> dataSources = ds.getDataSources();dataSources.forEach((k, v) -> {log.info("正在执行多数据源生成数据库文件 " + k);Flyway flyway = Flyway.configure().dataSource(v).locations(SQL_LOCATION + "/" + k).baselineOnMigrate(BASELINE_ON_MIGRATE).table(VERSION_TABLE).outOfOrder(OUT_OF_ORDER).validateOnMigrate(VALIDATE_ON_MIGRATE).load();flyway.migrate();});}}

完成。


http://chatgpt.dhexx.cn/article/9IqFEMoZ.shtml

相关文章

Flyway学习和使用

1、什么是Flyway Flyway is an open-source database migration tool. It strongly favors simplicity and convention over configuration. It is based around just 7 basic commands: Migrate, Clean, Info, Validate, Undo, Baseline and Repair. Flyway是一款开源的数据…

flyway baseline-version

背景 使用flyway进行数据库版本控制。 问题 flyway配置 # 当迁移发现数据库非空且存在没有元数据的表时&#xff0c;自动执行基准迁移&#xff0c;新建schema_version表baseline-on-migrate: true# 开始执行基准迁移时对现有的schema的版本打标签&#xff0c;默认值为1basel…

Ruoyi集成flyway后启动报错的解决方法

ruoyi系列框架是开源中非常好的源码平台&#xff0c;使用宽松的开源协议进行源代码的开放。不管是单体版、前后端分离甚至是微服务架构&#xff0c;均提供了相应的代码。基于ruoyi可以做自己的后台系统&#xff0c;也可以学习很多技术的集成。 而flyway是java里面的数据库脚本…

快速掌握和使用Flyway

什么是Flyway? 转载&#xff1a;https://blog.waterstrong.me/flyway-in-practice/ Flyway is an open-source database migration tool. It strongly favors simplicity and convention over configuration. Flyway是一款开源的数据库版本管理工具&#xff0c;它更倾向于规约…

flyway使用说明

Flyway是一款数据库迁移&#xff08;migration&#xff09;工具。简单点说&#xff0c;就是在你部署应用的时候&#xff0c;帮你执行数据库脚本的工具。Flyway支持SQL和Java两种类型的脚本&#xff0c;你可以将脚本打包到应用程序中&#xff0c;在应用程序启动时&#xff0c;由…

Flyway 入门教程

目录 一、简单介绍 二、Flyway使用场景 三、Flyway工作原理 四、Flyway如何校验文件 五、使用Flyway 5.1 引入依赖 5.2 添加配置 5.2.1 SpringBoot配置 5.2.2 SpringMVC配置 5.3 脚本准备 六、使用Maven插件 七、特别说明 一、简单介绍 Flyway 是一款开源的数据库…

SpringBoot引入Flyway,及Flyway简单了解

Flyway 中的常用概念 Flyway 中的概念可查阅 官方文档&#xff0c;这里挑选一些重要的进行简单介绍。 Schema History Table Flyway 对数据库进行版本控制的方式&#xff0c;是在指定数据库中创建一张表&#xff0c;即 Schema History Table&#xff08;默认为 flyway_schem…

Flyway详解以及Springboot集成Flyway

Flayway是一款数据库版本控制管理工具&#xff0c;&#xff0c;支持数据库版本自动升级&#xff0c;Migrations可以写成sql脚本&#xff0c;也可以写在java代码里&#xff1b;不仅支持Command Line和java api &#xff0c;也支持Build构建工具和Spring boot&#xff0c;也可以在…

spring-cloud集成数据库版本迁移工具flyway

spring-cloud集成数据库版本迁移工具flyway Flyway实现数据库版本同步有两种方式&#xff0c;一种就是直接导包&#xff0c;通过配置文件使用&#xff0c;还有一种就是自定义的方式。一 、依赖配置文件 1 flyway实现sql初始化 1.1 首先需要添加依赖 <!--mysql数据库版本…

Flyway 数据库版本控制

背景 在我们日常产品发布的过程中&#xff0c;代码的版本控制可以使用git、svn工具实现。对于数据库每当发布时会出现手动执行sql脚本进行升级数据库&#xff0c;中间经常出现一些漏写、错写情况&#xff0c;对数据库的版本与代码的版本不匹配&#xff0c;导致上线后出现数据库…

FlyWay入门教程

文章目录 Flyway1. 概述2. 工作原理与基本概念工作原理概述基本概念**[Migration(迁移)](https://flywaydb.org/documentation/concepts/migrations#naming)** 3. 安装和基本使用命令行安装使用命令 Java APISpring Boot Flyway Flyway by Redgate • 数据库迁移变得简单。 ---…

flyway的学习

Flyway 是一款开源的数据库版本管理工具。管理数据库变更的版本。 flyway工作流程如下&#xff1a; 项目启动&#xff0c;应用程序完成数据库连接池的建立后&#xff0c;Flyway自动运行。初次使用时&#xff0c;flyway会创建一个flyway_schema_history 表&#xff0c;用于记录…

Flyway的简单介绍及使用

Flyway的简单介绍及使用 一、开发时管理数据库遇到的问题&#xff1a; 现在开发一般都是团队开发&#xff0c;这样就会出现项目同步的问题&#xff0c;代码同步可以通过SVN工具管理起来&#xff0c;那数据库同步怎么办呢&#xff1f;理想的情况下&#xff0c;在开发新项目的时…

Flyway使用入门

Flyway简介 Flyway 是一款开源的数据库版本管理工具。它可以很方便的在命令行中使用&#xff0c;或者在Java应用程序中引入&#xff0c;用于管理我们的数据库版本。 在项目或产品中&#xff0c;很难一开始就把业务理清楚&#xff0c;把数据库表设计好&#xff0c;因此数据表也…

SpringBoot集成Flyway

1. 背景 Flyway是一个款数据库版本管理工具,通过集成Flyway可以实现启动项目时自动执行项目迭代升级所需Sql语句,从而减少升级项目时人工干预成本. 2. 集成Flyway pom文件引入依赖 <dependency><groupId>org.flywaydb</groupId><artifactId>flyway…

Flyway介绍和使用

一 使用背景 在我们日常产品发布的过程中&#xff0c;代码的版本控制可以使用git、svn工具实现。对于数据库每当发布时会出现手动执行sql脚本进行升级数据库&#xff0c;中间经常出现一些漏写、错写情况&#xff0c;对数据库的版本与代码的版本不匹配&#xff0c;导致上线后出…

Flyway简介

Flyway简介 总结&#xff1a;Flyway可以很方便的帮我们完成数据库部署和增量升级&#xff0c;很有用&#xff0c;但是版本回滚操作并不给力&#xff5e;&#xff5e;&#xff5e; 1、简介 1.1、Flyway是什么 Flyway是一款数据库迁移&#xff08;migration&#xff09;工具。简…

数据库版本管理工具 Flyway 使用

目录 一、简介 二、核心概念 1、Schema History Table 2、Migration 3、Versioned migrations 三、集成 SpringBoot 1、pom文件中引入依赖 2、application.yml配置 3、sql 脚本编写 四、初始化数据库 五、注意事项 一、简介 Flyway是一款开源的数据库版本管理工具&am…

Flyway简介及使用

Flyway简介及使用 1、简介 1.1 Flyway是什么&#xff1f; Flyway是一款开源的数据库版本管理工具&#xff0c;它更倾向于规约优于配置的方式。 Flyway可以独立于应用实现管理并跟踪数据库变更&#xff0c;支持数据库版本自动升级&#xff0c;并且有一套默认的规约&#xff0…

Flyway基础简介

1. 概述 Flyway是独立于数据库的应用、管理并跟踪数据库变更的数据库版本管理工具。 自动升级&#xff08;自动发现更新项&#xff09;&#xff1a;Flyway 会将任意版本的数据库升级到最新版本。Flyway 可以脱离JVM 环境通过命令行执行&#xff0c;可以通过Ant 脚本执行&#…