SpringBoot项目集成Flyway的完整过程如下:
1. 添加依赖
需要在pom.xml文件中添加Flyway的依赖:
<dependencies>
<!-- spring boot starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- flyway -->
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>{version}</version>
</dependency>
</dependencies>
其中,{version}
为当前最新版本号。
2. 配置
在src/main/resources中添加Flyway的配置文件application.properties
或application.yml
。
application.properties
的配置如下:
# Flyway 配置
flyway.url=jdbc:mysql://${mysql.host}:${mysql.port}/${mysql.db}
flyway.user=${mysql.username}
flyway.password=${mysql.password}
# Flyway sql 脚本目录
flyway.locations=classpath:db/migration
# 是否开启Flyway
flyway.enabled=true
application.yml
的配置如下:
# Flyway 配置
flyway:
# 数据库连接url
url: jdbc:mysql://${mysql.host}:${mysql.port}/${mysql.db}?autoReconnect=true&useSSL=false&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
# 数据库用户名
user: ${mysql.username}
# 数据库密码
password: ${mysql.password}
# SQL脚本目录
locations: classpath:db/migration
# SQL脚本文件前缀
sql-migration-prefix: V
# SQL脚本分隔符
sql-migration-separator: ;
# 是否开启Flyway
enabled: true
说明:
flyway.url
:指定数据库连接URL,需要替换为你自己的数据库连接URL,此处使用了${}
变量,需要在配置文件中做好变量的替换。flyway.locations
:指定Flyway管理的SQL脚本文件目录。
3. 创建SQL脚本
在flyway.locations
配置的目录下创建SQL脚本文件,文件名为按版本号命名的前缀+版本号,如:V1__initial.sql。
示例:
-- V1__initial.sql
CREATE TABLE user (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(50) NOT NULL
);
说明:
- V1
:SQL脚本文件的前缀;
- __
:两个下划线分隔前缀和版本号,Flyway根据这个分隔符从文件名中解析出版本号;
- initial
:版本号,表示这是第一个版本的脚本文件。
需要注意的事项:
- SQL脚本文件中必须只包含SQL语句;
- 在修改、删除表或字段时,在已发布的版本中请不要修改之前已有的表或字段,应新增一个新的版本;
- 每次修改SQL脚本文件之后,需要修改版本号,Flyway会根据版本号来执行脚本文件。
4. 执行Flyway命令
在Maven的命令行输入以下命令:
mvn flyway:migrate
或者在IDEA中的Maven Project中找到Plugins
->flyway
->flyway:migrate
。
这个命令会启动Flyway,按照版本号顺序逐个执行脚本文件,将数据库升级到最新版本。
示例1
假设我们已经有了一个数据库,并且已经存在一个名为user
的表,里面有两个字段:id
和username
。
我们需要在这个表中新增一个字段email
,那么我们应该:
- 将
V1__initial.sql
文件内的内容改为:
-- V1__initial.sql
ALTER TABLE user ADD email VARCHAR(50) NULL;
- 新建文件
V2__add-new-column-to-user.sql
,文件内容:
-- V2__add-new-column-to-user.sql
ALTER TABLE user ADD email VARCHAR(50) NULL;
- 执行Flyway命令
mvn flyway:migrate
。
此时Flyway会自动识别出脚本文件中需要新增的字段,执行SQL语句来更新数据库的结构。
示例2
假设我们现在需要删除email
字段,并新增一个名为phone
的字段,那么我们需要:
- 在上一个示例中新建的
V2__add-new-column-to-user.sql
文件内,修改内容为:
-- V2__add-new-column-to-user.sql
ALTER TABLE user DROP COLUMN email;
- 新建文件
V3__add-another-column-to-user.sql
,内容为:
-- V3__add-another-column-to-user.sql
ALTER TABLE user ADD phone VARCHAR(50) NULL;
- 执行Flyway命令
mvn flyway:migrate
此时Flyway会识别出第二个脚本文件是当前最新版本,将分别执行删除email
字段和新增phone
字段的SQL语句,更新数据库结构。
至此,SpringBoot项目集成Flyway的完整攻略就结束了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot项目集成Flyway详细过程 - Python技术站