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

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.lryc.cn/news/607722.html

相关文章:

  • 决策树算法:三大核心流程解析
  • 嵌入式系统的中断控制器(NVIC)
  • SpringCloud实战:机器人对战系统架构
  • 《软件测试与质量控制》实验报告二 单元测试
  • Terraria 服务端部署(Docker)
  • 【Java】不允许直接操作数据表中的数据,开发前台界面来实现对多个数据表的增删改查
  • 在 AKS 中运行 Azure DevOps 自托管代理-2
  • 【Office】Office2024最新版下载安装使用教程(附多版本安装包)
  • 【深度学习新浪潮】什么是专业科研智能体?
  • Flutter镜像替换
  • 大模型学习专栏-导航页
  • 第十四天:C++内存管理
  • 5-EP4CE10F17C8-引脚配置
  • 亚像素级精度的二维图像配准方法
  • Metamorph、LlamaFusion、MetaQuery论文解读
  • 第13届蓝桥杯Python青少组中/高级组选拔赛(STEMA)2022年1月22日真题
  • 两个服务之间的大规模数据推送
  • 《文明5》错误代码0xc0000142修复方法
  • linux编译基础知识-工具链
  • Java 日期时间格式化模式说明
  • 蓝桥杯----DA、AD
  • Prim算法
  • 26数据结构-顺序表
  • python列表推导式
  • windows系统安装文生图大模型Stable diffusion V3.5 large(完整详细可用教程)
  • 损失函数和调度器相关类代码回顾理解 |nn.CrossEntropyLoss\CosineAnnealingLR
  • 接口幂等性
  • 数据库小知识
  • C4画图实战案例分享
  • 利用CompletableFuture优化查询效率