下面是“spring框架集成flyway项目的详细过程”的完整攻略。
一、什么是flyway?
Flyway是一个开源的数据库迁移工具,可以帮助我们管理数据库版本的升级和降级。Flyway使用简单,不需要依赖任何第三方库,支持多种数据库,包括MySQL、Oracle、PostgreSQL等。
二、在spring框架中集成flyway
1. 添加依赖
在pom.xml
中添加以下依赖:
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>7.4.3</version>
</dependency>
2. 配置数据源
在application.properties
中添加数据库连接信息:
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=root
3. 创建迁移脚本
在项目的src/main/resources/db/migration
目录下创建V1.0.0__init.sql
文件,该文件表示数据库的初始版本。例如:
CREATE TABLE t_user (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
age INT UNSIGNED
);
创建新版本的脚本文件时,文件名需要以V
开头,后面是版本号,版本号可以是数字、字母和点号的组合,然后是两个下划线和脚本描述。例如V1.1.0__alter_user_table.sql
。在修改表结构或数据时,需要按版本号顺序编写脚本文件,文件名中的版本号必须高于上一个版本。例如在表t_user
中添加一列email
:
ALTER TABLE t_user ADD email VARCHAR(50) NULL DEFAULT NULL;
4. 执行迁移
在spring启动时,Flyway会扫描db/migration
目录下的脚本文件,并执行这些脚本文件。在application.properties
中添加Flyway的配置项:
# 扫描迁移脚本文件的路径
flyway.locations=classpath:db/migration
# 是否跳过未找到合法迁移的异常
flyway.baseline-on-migrate=true
# 是否在启动时执行迁移
flyway.enabled=true
# 是否允许DDL语句在事务中执行
spring.flyway.clean-disabled=true
# 版本号格式,可以是数字、字母和点号的组合
flyway.target=1.4.0
其中,flyway.locations
表示扫描迁移脚本文件的路径;flyway.baseline-on-migrate
表示如果没有任何迁移记录,是否自动执行初始版本的脚本文件;flyway.enabled
表示是否在启动时执行迁移;spring.flyway.clean-disabled
表示是否允许DDL语句在事务中执行;flyway.target
表示目标版本号。如果不指定flyway.target
,则会执行所有比当前版本号高的脚本文件。
三、示例
下面是两个示例,第一个示例演示如何创建一个新表,第二个示例演示如何在表中添加新字段。
示例1:创建新表
1. 创建表结构脚本
在src/main/resources/db/migration
目录下创建V1.0.0__create_person.sql
文件,该文件表示数据库的初始版本,内容如下:
CREATE TABLE person (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(30) UNIQUE NOT NULL,
age INT UNSIGNED,
gender BIT DEFAULT 1,
email VARCHAR(50) DEFAULT ''
);
2. 执行迁移
启动spring项目,Flyway会自动扫描db/migration
下的脚本文件,并执行这些脚本文件。可以在控制台中看到执行的结果:
Flyway Community Edition 7.4.3 by Redgate
Database: jdbc:mysql://localhost:3306/test (MySQL 8.0)
Successfully validated 1 migration (execution time 00:00.014s)
Creating Schema History table `test`.`flyway_schema_history`...
Current version of schema `test`: 1.0.0
Migrating schema `test` to version `1.0.0` - create person table.
Successfully applied 1 migration to schema `test` (execution time 00:00.073s)
可以看到,Flyway成功执行了V1.0.0__create_person.sql
脚本文件。
示例2:添加新字段
1. 创建表结构脚本
在db/migration
目录下创建V1.1.0__add_email_to_person.sql
文件,内容如下:
ALTER TABLE person ADD email VARCHAR(50) DEFAULT '';
2. 执行迁移
启动spring项目,Flyway会自动扫描db/migration
下的脚本文件,并执行这些脚本文件。可以在控制台中看到执行的结果:
Flyway Community Edition 7.4.3 by Redgate
Database: jdbc:mysql://localhost:3306/test (MySQL 8.0)
Successfully validated 2 migrations (execution time 00:00.020s)
Current version of schema `test`: 1.1.0
Migrating schema `test` to version `1.1.0` - add email to person.
Successfully applied 1 migration to schema `test` (execution time 00:00.022s)
可以看到,Flyway成功执行了V1.1.0__add_email_to_person.sql
脚本文件,并且将版本号更新为1.1.0
。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:spring框架集成flyway项目的详细过程 - Python技术站