Skip to content

Commit cb11c2b

Browse files
authored
Dev (#5844)
* feat: liquibase切换成flyway * feat: liquibase切换成flyway
2 parents 953caa9 + 81dd03c commit cb11c2b

File tree

15 files changed

+186
-78
lines changed

15 files changed

+186
-78
lines changed

README.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ image::doc/image/老寇IoT云平台业务架构图.png[架构图,align=center]
199199
- 序列化&反序列化:Jackson & Fory & Protobuf
200200
- 数据库:Postgresql
201201
- 时序数据库:TimescaleDB & TDengine & InfluxDB
202-
- 数据库迁移:Liquibase
202+
- 数据库迁移:Flyway
203203
- 链路&指标采集:Micrometer
204204

205205
==== 🌴 项目结构
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
---
2+
title: Flyway配置
3+
date: 2026-03-10 12:46:35
4+
permalink: /pages/a0baf8/
5+
---
6+
7+
你好呀,我的老朋友!我是老寇,欢迎来到老寇IoT云平台!
8+
9+
### 什么是 Flyway?
10+
Flyway 是一个开源的数据库迁移工具,它秉承“约定优于配置”的理念,让数据库变更的过程像代码版本控制一样简单且可追溯。
11+
12+
### Spring Boot 集成 Flyway
13+
在 Spring Boot 项目中集成 Flyway 步骤如下:
14+
15+
1. **引入依赖**
16+
`pom.xml` 中引入相关的依赖:
17+
```xml
18+
<dependency>
19+
<groupId>org.flywaydb</groupId>
20+
<artifactId>flyway-core</artifactId>
21+
</dependency>
22+
<dependency>
23+
<groupId>org.flywaydb</groupId>
24+
<artifactId>flyway-database-postgresql</artifactId> <!-- 若为 PostgreSQL 需要此包 -->
25+
</dependency>
26+
```
27+
28+
2. **配置 application.yml**
29+
配置 Flyway 的基础参数:
30+
```yaml
31+
spring:
32+
flyway:
33+
enabled: true
34+
# SQL脚本存放路径,默认是 classpath:db/migration
35+
locations: classpath:db/migration
36+
# 第一次运行环境是否自动执行基准迁移(当已有数据库表时需开启)
37+
baseline-on-migrate: true
38+
# 基准版本号,默认为 1
39+
baseline-version: 1
40+
# 历史记录表名,默认 flyway_schema_history
41+
table: flyway_schema_history
42+
```
43+
44+
3. **编写 SQL 脚本**
45+
46+
`src/main/resources/db/migration` 目录下按照约定命名并存放你的 SQL 脚本:
47+
48+
**命名规范**:` V{版本号}_{yyyyMMddHHmm}__{operate}_{table}.sql`
49+
50+
<font style="color: red;">注意事项:执行过的SQL脚本不能修改,如果需要修改字段类型,添加字段等,参考alter</font>
51+
52+
**操作类型(operate):**
53+
- create(创建表)
54+
- insert(插入数据)
55+
- update(修改数据)
56+
- delete(删除数据)
57+
- alter(新增或修改表字段类型/注释/名称)
58+
- idx(新增索引)
59+
60+
**例如**:`V1_202304011000__create_user.sql`、`V2_202304011001__insert_user.sql`
61+
62+
项目启动时,Spring Boot 会自动执行未被记录的脚本,并将其状态写入并维护在 `flyway_schema_history` 表中。
63+
64+
### Flyway 与 Liquibase 的对比区别
65+
66+
Flyway 和 Liquibase 都是目前主流且优秀的数据库版本控制工具,但也存在明显的差异:
67+
68+
| 特性维度 | Flyway | Liquibase |
69+
|----------------|--------------------------------------------|---------------------------------------------------|
70+
| **编写格式** | 主要是纯 `SQL` 文件(也支持 Java API) | 主要通过 `XML`、`YAML`、`JSON` 描述(也支持 SQL) |
71+
| **学习曲线** | **平缓/极低**:掌握 SQL 即可上手,简单直观。 | **陡峭/较高**:需学习特有的标签和语法节点。 |
72+
| **跨数据库兼容** | **较弱**:因为直接写原生 SQL,换数据库时往往需重写或维护多套 SQL 脚本。 | **极强**:只需写一套 XML/YAML,工具会自动翻译为目标数据库的方言。 |
73+
| **功能丰富度** | 轻量级,功能简单,专注于直接执行变更。 | 重量级,提供复杂的 Preconditions(前置条件)、上下文(Contexts)控制等功能。 |
74+
| **回滚能力(Undo)** | 社区免费版**不支持**回滚功能(仅商业版支持)。 | 免费开源版**原生支持**很好的回滚(Rollback)操作。 |
75+
| **最佳适用场景** | 数据库选型固定(例如只用 MySQL),团队喜欢原生 SQL 所见即所得。 | 需同时兼容 MySQL/PG/Oracle 等多类型数据库的产品,或强依赖回滚管理的企业级应用。 |
76+
77+
**优势与劣势**
78+
79+
| 维度 | Flyway | Liquibase |
80+
|-------------|--------|-----------|
81+
| 学习成本 | 低 | 高 |
82+
| 简单性 | 非常简单 | 复杂 |
83+
| SQL支持 | 原生 | 需要 DSL |
84+
| rollback | 弱 | 强 |
85+
| 多数据库支持 | 弱 | 强 |
86+
| schema diff | 无 | 有 |
87+
| CI/CD | 非常友好 | 一般 |
88+
| 微服务 | 非常适合 | 一般 |
89+
90+
我是老寇,我们下次再见啦!

doc/db/4.0.0/kcloud_platform_nacos.sql

Lines changed: 1 addition & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -197,36 +197,7 @@ COMMENT ON TABLE "public"."group_capacity" IS '集群、各Group容量信息表'
197197
ALTER TABLE "public"."group_capacity" ADD CONSTRAINT "group_capacity_pkey" PRIMARY KEY ("id");
198198
CREATE UNIQUE INDEX "group_capacity_group_id_idx" ON "public"."group_capacity" USING btree (
199199
"group_id"
200-
);
201-
202-
DROP TABLE IF EXISTS "public"."databasechangeloglock";
203-
CREATE TABLE "public"."databasechangeloglock" (
204-
"id" int4 NOT NULL,
205-
"locked" bool NOT NULL,
206-
"lockgranted" timestamp(6),
207-
"lockedby" varchar(255)
208-
)
209-
;
210-
211-
DROP TABLE IF EXISTS "public"."databasechangelog";
212-
CREATE TABLE "public"."databasechangelog" (
213-
"id" varchar(255) NOT NULL,
214-
"author" varchar(255) NOT NULL,
215-
"filename" varchar(255) NOT NULL,
216-
"dateexecuted" timestamp(6) NOT NULL,
217-
"orderexecuted" int4 NOT NULL,
218-
"exectype" varchar(10) NOT NULL,
219-
"md5sum" varchar(35) ,
220-
"description" varchar(255) ,
221-
"comments" varchar(255) ,
222-
"tag" varchar(255) ,
223-
"liquibase" varchar(20) ,
224-
"contexts" varchar(255) ,
225-
"labels" varchar(255) ,
226-
"deployment_id" varchar(10)
227-
)
228-
;
229-
ALTER TABLE "public"."databasechangeloglock" ADD CONSTRAINT "databasechangeloglock_pkey" PRIMARY KEY ("id");
200+
);
230201

231202
DROP TABLE IF EXISTS "public"."config_tags_relation";
232203
CREATE TABLE "public"."config_tags_relation" (

laokou-service/laokou-admin/laokou-admin-infrastructure/pom.xml

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -119,14 +119,16 @@
119119
<artifactId>spring-boot-configuration-processor</artifactId>
120120
</dependency>
121121
<dependency>
122-
<groupId>org.liquibase</groupId>
123-
<artifactId>liquibase-core</artifactId>
124-
<exclusions>
125-
<exclusion>
126-
<groupId>com.opencsv</groupId>
127-
<artifactId>opencsv</artifactId>
128-
</exclusion>
129-
</exclusions>
122+
<groupId>org.flywaydb</groupId>
123+
<artifactId>flyway-core</artifactId>
124+
</dependency>
125+
<dependency>
126+
<groupId>org.flywaydb</groupId>
127+
<artifactId>flyway-database-postgresql</artifactId>
128+
</dependency>
129+
<dependency>
130+
<groupId>org.springframework.boot</groupId>
131+
<artifactId>spring-boot-flyway</artifactId>
130132
</dependency>
131133
<dependency>
132134
<groupId>org.laokou</groupId>
@@ -171,10 +173,6 @@
171173
<artifactId>laokou-common-csv</artifactId>
172174
<version>${project.version}</version>
173175
</dependency>
174-
<dependency>
175-
<groupId>org.springframework.boot</groupId>
176-
<artifactId>spring-boot-liquibase</artifactId>
177-
</dependency>
178176
</dependencies>
179177

180178
</project>

laokou-service/laokou-admin/laokou-admin-start/src/main/resources/application.yml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,9 +124,12 @@ spring:
124124
eager: true #开启饥饿加载,直接初始化
125125
transport:
126126
dashboard: sentinel:8972
127-
liquibase:
127+
flyway:
128128
enabled: true
129-
change-log: classpath:/db/changelog/db.changelog-master.xml
129+
locations: classpath:db/migration
130+
baseline-on-migrate: true
131+
baseline-version: 0
132+
validate-on-migrate: true
130133
cache:
131134
configs:
132135
users:

laokou-service/laokou-admin/laokou-admin-start/src/main/resources/db/changelog/db.changelog-master.xml

Lines changed: 0 additions & 10 deletions
This file was deleted.

laokou-service/laokou-admin/laokou-admin-start/src/main/resources/db/changelog/sql/000001_create_i18n_menu.sql renamed to laokou-service/laokou-admin/laokou-admin-start/src/main/resources/db/migration/V1_202603092010__create_i18n_menu.sql

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
-- liquibase formatted sql
2-
3-
-- changeset dev:000001
41
DROP TABLE IF EXISTS "public"."sys_i18n_menu";
52
CREATE TABLE "public"."sys_i18n_menu" (
63
"id" int8 NOT NULL GENERATED BY DEFAULT AS IDENTITY,

laokou-service/laokou-admin/laokou-admin-start/src/main/resources/db/changelog/sql/000002_insert_i18n_menu.sql renamed to laokou-service/laokou-admin/laokou-admin-start/src/main/resources/db/migration/V2_202603092010__insert_i18n_menu.sql

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
-- liquibase formatted sql
2-
3-
-- changeset dev:000002
41
INSERT INTO "public"."sys_i18n_menu" VALUES (8, 1, 1, '2026-03-07 12:06:37', '2026-03-07 12:06:37', 0, 0, 0, 1535887940687765505, 'menu.iot.device.thingModel', '物模型');
52
INSERT INTO "public"."sys_i18n_menu" VALUES (10, 1, 1, '2026-03-07 12:06:37', '2026-03-07 12:06:37', 0, 0, 0, 1535887940687765505, 'menu.iot.device.productCategory', '产品类别');
63
INSERT INTO "public"."sys_i18n_menu" VALUES (1, 1, 1, '2026-03-07 12:06:37', '2026-03-07 12:06:37', 0, 0, 0, 1535887940687765505, 'menu.sys', '系统管理');

laokou-service/laokou-admin/laokou-admin-start/src/main/resources/db/changelog/sql/000003_update_menu.sql renamed to laokou-service/laokou-admin/laokou-admin-start/src/main/resources/db/migration/V3_202603092010__update_menu.sql

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1 @@
1-
-- liquibase formatted sql
2-
3-
-- changeset dev:000003
41
UPDATE "public".sys_menu SET "name" = '国际化菜单', "path" = '/sys/base/i18nMenu' where id = 29;

laokou-service/laokou-standalone/laokou-standalone-admin/laokou-standalone-admin-start/src/main/resources/application.yml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,9 +126,12 @@ spring:
126126
ttl: 5m
127127
oss:
128128
ttl: 5m
129-
liquibase:
129+
flyway:
130130
enabled: true
131-
change-log: classpath:/db/changelog/db.changelog-master.xml
131+
locations: classpath:db/migration
132+
baseline-on-migrate: true
133+
baseline-version: 0
134+
validate-on-migrate: true
132135
# actuator
133136
management:
134137
endpoints:

0 commit comments

Comments
 (0)