【数据库系列】Liquibase 在 Spring Boot 中的利用--详细介绍 ...

打印 上一主题 下一主题

主题 1639|帖子 1639|积分 4927


   Liquibase 是一个强大的数据库版本控制工具,能够资助开发者管理和追踪数据库布局和数据的变更。通过与 Spring Boot
的集成,Liquibase 提供了便捷的数据库迁移和版本控制功能。本文将通过多个丰富的示例,详细讲授如何在 Spring Boot
项目中利用 Liquibase。
  1. 项目预备

1.1 创建 Spring Boot 项目

访问 Spring Initializr 创建新的 Spring Boot 项目,选择以下依靠项:


  • Spring Web
  • Spring Data JPA
  • MySQL Driver(或其他数据库驱动)
  • Liquibase Migration
下载并解压缩天生的项目。
1.2 添加 Maven 依靠

在 pom.xml 中,确保添加 Liquibase 的依靠:
  1. <dependency>
  2.     <groupId>org.liquibase</groupId>
  3.     <artifactId>liquibase-core</artifactId>
  4.     <version>4.x.x</version> <!-- 使用最新版本 -->
  5. </dependency>
复制代码
同时确保包罗 Spring Data JPA 和数据库驱动的依靠,比方 MySQL:
  1. <dependency>
  2.     <groupId>org.springframework.boot</groupId>
  3.     <artifactId>spring-boot-starter-data-jpa</artifactId>
  4. </dependency>
  5. <dependency>
  6.     <groupId>mysql</groupId>
  7.     <artifactId>mysql-connector-java</artifactId>
  8. </dependency>
复制代码
1.3 配置数据库毗连

在 src/main/resources/application.properties 中配置数据库毗连信息:
  1. spring.datasource.url=jdbc:mysql://localhost:3306/my_database?useSSL=false&serverTimezone=UTC
  2. spring.datasource.username=my_user
  3. spring.datasource.password=my_password
  4. spring.jpa.hibernate.ddl-auto=none
  5. spring.liquibase.change-log=classpath:db/changelog/db.changelog-master.xml
复制代码
2. 示例 1:创建用户表

2.1 创建变更日志文件

在 src/main/resources/db/changelog 目录下创建一个变更日志文件 db.changelog-master.xml,并界说用户表的创建。
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <databaseChangeLog
  3.     xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5.     xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
  6.     http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.3.xsd">
  7.     <changeSet id="1" author="authorName">
  8.         <createTable tableName="users">
  9.             <column name="id" type="int">
  10.                 <constraints primaryKey="true" autoIncrement="true"/>
  11.             </column>
  12.             <column name="name" type="varchar(100)">
  13.                 <constraints nullable="false"/>
  14.             </column>
  15.             <column name="email" type="varchar(100)">
  16.                 <constraints unique="true"/>
  17.             </column>
  18.             <column name="created_at" type="timestamp">
  19.                 <constraints nullable="false" defaultValueComputed="CURRENT_TIMESTAMP"/>
  20.             </column>
  21.         </createTable>
  22.     </changeSet>
  23. </databaseChangeLog>
复制代码
2.2 启动应用程序

运行应用程序:
  1. mvn spring-boot:run
复制代码
2.3 验证结果

利用数据库管理工具检查 my_database,确认 users 表已乐成创建。
  1. SHOW TABLES; -- 查看数据库中的所有表
  2. SELECT * FROM users; -- 查看 users 表
复制代码
3. 示例 2:添加列和修改列类型

3.1 修改变更日志文件

在 db.changelog-master.xml 中添加新的变更集,用于向 users 表添加 age 列并修改 name 列的类型。
  1. <changeSet id="2" author="authorName">
  2.     <addColumn tableName="users">
  3.         <column name="age" type="int"/>
  4.     </addColumn>
  5. </changeSet>
  6. <changeSet id="3" author="authorName">
  7.     <modifyDataType tableName="users" columnName="name" newDataType="varchar(255)"/>
  8. </changeSet>
复制代码
3.2 再次启动应用程序

重新启动应用程序,Liquibase 会检测到新的变更集并应用。
  1. mvn spring-boot:run
复制代码
3.3 验证结果

利用数据库管理工具,检查 users 表,确认 age 列已经添加,并且 name 列的类型已更新。
  1. DESCRIBE users; -- 查看 users 表的结构
复制代码
4. 示例 3:创建订单表并添加外键束缚

4.1 修改变更日志文件

在 db.changelog-master.xml 中添加新的变更集,用于创建 orders 表并添加外键束缚。
  1. <changeSet id="4" author="authorName">
  2.     <createTable tableName="orders">
  3.         <column name="id" type="int">
  4.             <constraints primaryKey="true" autoIncrement="true"/>
  5.         </column>
  6.         <column name="user_id" type="int"/>
  7.         <column name="product" type="varchar(100)">
  8.             <constraints nullable="false"/>
  9.         </column>
  10.         <column name="quantity" type="int">
  11.             <constraints nullable="false"/>
  12.         </column>
  13.         <column name="order_date" type="timestamp">
  14.             <constraints defaultValueComputed="CURRENT_TIMESTAMP"/>
  15.         </column>
  16.         <foreignKeyConstraint baseTableName="orders" baseColumnNames="user_id"
  17.             referencedTableName="users" referencedColumnNames="id"
  18.             constraintName="fk_user_id"/>
  19.     </createTable>
  20. </changeSet>
复制代码
4.2 启动应用程序

再次运行应用程序:
  1. mvn spring-boot:run
复制代码
4.3 验证结果

利用数据库管理工具检查 my_database,确认 orders 表已乐成创建,并且 user_id 列与 users 表的 id 列建立了外键关系。
  1. SHOW TABLES; -- 查看数据库中的所有表
  2. SELECT * FROM orders; -- 查看 orders 表
复制代码
5. 示例 4:数据填充

5.1 创建数据填充变更集

在 db.changelog-master.xml 中添加一个新的变更集,用于插入初始数据。
  1. <changeSet id="5" author="authorName">
  2.     <insert tableName="users">
  3.         <column name="name" value="John Doe"/>
  4.         <column name="email" value="john@example.com"/>
  5.         <column name="age" value="30"/>
  6.     </insert>
  7.     <insert tableName="users">
  8.         <column name="name" value="Jane Smith"/>
  9.         <column name="email" value="jane@example.com"/>
  10.         <column name="age" value="25"/>
  11.     </insert>
  12. </changeSet>
复制代码
5.2 启动应用程序

再次启动应用程序,Liquibase 会自动将数据插入 users 表。
  1. mvn spring-boot:run
复制代码
5.3 验证结果

检查 users 表,确认数据已正确插入。
  1. SELECT * FROM users; -- 查看 users 表中的数据
复制代码
6. 示例 5:回滚变更

6.1 添加回滚操作

在 db.changelog-master.xml 中,您可以为变更集添加回滚操作。比方,为创建 users 表的变更集添加回滚逻辑:
  1. <changeSet id="1" author="authorName">
  2.     <createTable tableName="users">
  3.         <column name="id" type="int">
  4.             <constraints primaryKey="true" autoIncrement="true"/>
  5.         </column>
  6.         <column name="name" type="varchar(100)">
  7.             <constraints nullable="false"/>
  8.         </column>
  9.         <column name="email" type="varchar(100)">
  10.             <constraints unique="true"/>
  11.         </column>
  12.         <column name="created_at" type="timestamp">
  13.             <constraints nullable="false" defaultValueComputed="CURRENT_TIMESTAMP"/>
  14.         </column>
  15.     </createTable>
  16.     <rollback>
  17.         <dropTable tableName="users"/>
  18.     </rollback>
  19. </changeSet>
复制代码
6.2 执行回滚

如果需要回滚到之前的状态,可以利用以下命令:
  1. mvn liquibase:rollback -Dliquibase.rollbackCount=1
复制代码
6.3 验证回滚结果

运行回滚命令后,利用数据库管理工具确认 users 表已被删除。
  1. SHOW TABLES; -- 查看数据库中的所有表
复制代码
7. 示例 6:利用 YAML 配置文件

除了 XML,Liquibase 还支持利用 YAML 格式的变更日志。以下是一个利用 YAML 的示例。
7.1 创建 YAML 变更日志文件

在 src/main/resources/db/changelog 目录下创建一个名为 db.changelog-master.yaml 的文件:
  1. databaseChangeLog:
  2.   - changeSet:
  3.       id: 1
  4.       author: authorName
  5.       changes:
  6.         - createTable:
  7.             tableName: users
  8.             columns:
  9.               - column:
  10.                   name: id
  11.                   type: int
  12.                   constraints:
  13.                     primaryKey: true
  14.                     autoIncrement: true
  15.               - column:
  16.                   name: name
  17.                   type: varchar(100)
  18.                   constraints:
  19.                     nullable: false
  20.               - column:
  21.                   name: email
  22.                   type: varchar(100)
  23.                   constraints:
  24.                     unique: true
  25.               - column:
  26.                   name: created_at
  27.                   type: timestamp
  28.                   constraints:
  29.                     nullable: false
  30.                     defaultValueComputed: CURRENT_TIMESTAMP
复制代码
7.2 更新配置

在 application.properties 中更新 spring.liquibase.change-log 的路径:
  1. spring.liquibase.change-log=classpath:db/changelog/db.changelog-master.yaml
复制代码
7.3 启动应用程序

再次启动应用程序,Liquibase 会根据 YAML 配置创建 users 表。
  1. mvn spring-boot:run
复制代码
8. 总结

通过以上丰富的示例,我们展示了如何在 Spring Boot 项目中利用 Liquibase 进行数据库版本控制和变更管理。Liquibase 提供了灵活的变更集机制,支持创建表、修改列、填充数据、回滚变更等多种操作。无论是利用 XML 还是 YAML 格式,Liquibase 都能够资助开发者有用管理数据库的演变,使得开发过程更加高效和可靠。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

来自云龙湖轮廓分明的月亮

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表