当前位置: 首页 > ops >正文

Spring Boot 全 YAML 配置 Liquibase 教程

一、项目初始化配置

1.1 创建 Spring Boot 项目

通过 Spring Initializr 生成基础项目,配置如下:

  • ​Project​​: Maven
  • ​Language​​: Java
  • ​Spring Boot​​: 3.5.3(最新稳定版)
  • ​Project Metadata​​:
    • Group: com.example
    • Artifact: liquibase-demo
    • Package name: com.example.liquibasedemo
  • ​Dependencies​​:
    • Spring Web
    • Spring Data JPA
    • MySQL Driver
    • Liquibase Migration

1.2 项目结构

src
├── main
│   ├── java
│   │   └── com.example.liquibasedemo
│   │       ├── config
│   │       ├── controller
│   │       ├── model
│   │       └── LiquibaseDemoApplication.java
│   └── resources
│       ├── application.yml
│       └── db
│           └── changelog
│               ├── db.changelog-master.yaml
│               └── changes
│                   ├── create-user-table.yaml
│                   └── add-age-column.yaml

二、YAML 配置体系

2.1 数据库连接配置

src/main/resources/application.yml:

spring:datasource:url: jdbc:mysql://localhost:3306/liquibase_demo?useSSL=false&serverTimezone=UTCusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driverjpa:hibernate:ddl-auto: none # 禁用自动 DDLshow-sql: trueliquibase:change-log: classpath:db/changelog/db.changelog-master.yaml
server:port: 8080

2.2 多环境配置(可选)

创建环境专用配置文件:

src/main/resources/
├── application.yml        # 主配置
├── application-dev.yml    # 开发环境
└── application-prod.yml   # 生产环境

激活环境配置:

spring:profiles:active: dev

三、Liquibase YAML 变更日志

3.1 主变更日志文件

db/changelog/db.changelog-master.yaml:

databaseChangeLog:- include:file: db/changelog/changes/create-user-table.yamlrelativeToChangelogFile: true- include:file: db/changelog/changes/add-age-column.yamlrelativeToChangelogFile: true

3.2 用户表创建变更集

db/changelog/changes/create-user-table.yaml:

databaseChangeLog:- changeSet:id: 1author: yournamechanges:- createTable:tableName: userscolumns:- column:name: idtype: INTautoIncrement: trueconstraints:primaryKey: truenullable: false- column:name: nametype: VARCHAR(100)constraints:nullable: false- column:name: emailtype: VARCHAR(100)constraints:unique: true- column:name: created_attype: TIMESTAMPdefaultValueComputed: CURRENT_TIMESTAMPconstraints:nullable: false

3.3 添加年龄列变更集

db/changelog/changes/add-age-column.yaml:

databaseChangeLog:- changeSet:id: 2author: yournamechanges:- addColumn:tableName: userscolumns:- column:name: agetype: INTdefaultValue: 18

四、代码集成与验证

4.1 实体类定义

src/main/java/com/example/liquibasedemo/model/User.java:

@Entity
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(nullable = false)private String name;@Column(unique = true)private String email;@Column(nullable = false)private Integer age;// Getters/Setters
}

4.2 数据操作验证

@RestController
@RequestMapping("/users")
public class UserController {@Autowiredprivate UserRepository userRepository;@PostMappingpublic User createUser(@RequestBody User user) {return userRepository.save(user);}@GetMappingpublic List<User> getAllUsers() {return userRepository.findAll();}
}

4.3 启动验证

mvn spring-boot:run

观察控制台输出:

INFO 12345 --- [           main] l.e.LiquibaseLoggingListener           : Starting Liquibase at 10:00:00 (version 4.23.0)
INFO 12345 --- [           main] l.e.LiquibaseLoggingListener           : ChangeSet db/changelog/changes/create-user-table.yaml::1::yourname executed successfully

五、高级功能实现

5.1 回滚配置

在变更集中添加回滚逻辑:

- changeSet:id: 3author: yournamechanges:- createTable:tableName: orderscolumns:- column:name: idtype: INTautoIncrement: trueconstraints:primaryKey: truenullable: falserollback:- dropTable:tableName: orders

5.2 条件变更

- changeSet:id: 4author: yournamepreConditions:- onFail: MARK_RANdbms: mysqlchanges:- createIndex:tableName: usersindexName: idx_emailcolumn:name: email

5.3 多环境数据初始化

db/changelog/changes/init-data.yaml:

databaseChangeLog:- changeSet:id: 5author: yournamecontext: devchanges:- insert:tableName: userscolumns:- column:name: namevalue: "Test User"- column:name: emailvalue: "test@example.com"- column:name: agevalue: 25

六、最佳实践指南

  1. ​版本控制规范​

    • 使用语义化版本号(如 1.0.0
    • 每个变更集对应单一业务变更
    • 变更集文件按版本顺序编号
  2. ​变更集设计原则​

    - changeSet:id: 6author: yournamechanges:- sqlFile:path: classpath:db/migration/V2__add_address_column.sqlrelativeToChangelogFile: true
  3. ​安全配置​

    spring:liquibase:contexts: devlabels: feature-user-modulerollbackCount: 3

七、常见问题解决方案

问题现象解决方案参考来源
变更集未执行检查 DATABASECHANGELOG 表记录
YAML格式错误使用在线YAML验证工具
数据库锁等待添加 liquibase.lock.timeout=600
多环境冲突使用 spring.profiles.active 隔离配置

八、完整项目结构示例

liquibase-demo/
├── src/
│   ├── main/
│   │   ├── java/
│   │   └── resources/
│   │       ├── application.yml
│   │       └── db/
│   │           └── changelog/
│   │               ├── db.changelog-master.yaml
│   │               └── changes/
│   │                   ├── create-user-table.yaml
│   │                   └── add-age-column.yaml
├── pom.xml
└── .gitignore

通过本教程,您可以完全使用 YAML 配置实现 Spring Boot 项目的数据库迁移管理。YAML 的层级结构能清晰展现数据库变更历程,配合 Liquibase 的版本控制能力,可有效提升团队协作效率和系统稳定性。

http://www.xdnf.cn/news/16832.html

相关文章:

  • C++之vector类的代码及其逻辑详解 (中)
  • DockerFile文件执行docker bulid自动构建镜像
  • CMake指令:mark_as_advanced
  • Python序列去重高级指南:保持顺序的高效去重技术
  • 错误: 找不到或无法加载主类 原因: java.lang.ClassNotFoundException
  • 云原生三剑客:Kubernetes + Docker + Spring Cloud 实战指南与深度整合
  • 分类任务当中常见指标 F1分数、recall、准确率分别是什么含义
  • 类似 Pixso 但更侧重「网页 / 软件界面设计」「前后端可视化开发」的工具
  • 【贪心】P11112 [ROI 2024] 机器人物流 (Day 1)|普及+
  • 基于python多光谱遥感数据处理、图像分类、定量评估及机器学习方法应用
  • Java函数式编程之【Stream终止操作】【下】【二】【收集器toMap()】【叁参数收集操作collect()】
  • Maven项目和Spring项目的异同
  • 企业资产|企业资产管理系统|基于springboot企业资产管理系统设计与实现(源码+数据库+文档)
  • Docker容器中文PDF生成解决方案
  • 计算机网络:为什么IPv6没有选择使用点分十进制
  • Pytorch-02数据集和数据加载器的基本原理和基本操作
  • Matplotlib - Python图表可视化利器
  • 面试小总结
  • vue引入阿里巴巴矢量图库的方式
  • 内网穿透系列十:高性能内网穿透工具 rathole,支持Docker一键部署
  • ubuntu 系统风扇控制软件 CoolerControl
  • AI驱动SEO关键词智能进化
  • Ubuntu18网络连接不上也ping不通网络配置问题排查与解决方法
  • Python 第一阶段测试题 答案及解析
  • 【正点原子K210连载】第二十四章 按键输入实验 摘自【正点原子】DNK210使用指南-CanMV版指南
  • Linux iptables防火墙操作
  • SQL 四大语言分类详解:DDL、DML、DCL、DQL
  • 【Go语言-Day 29】从time.Now()到Ticker:Go语言time包实战指南
  • C#开发入门指南_学习笔记
  • 【DL学习笔记】DL入门指南