官网 Flyway是一款管理并跟踪数据库迁移(migrate)的数据库版本管理工具
- flyway通过历史记录表(flyway_schema_history)来记录版本历史。每次随项目启动时将会自动扫描在resources/db/migration下的文件并查询flyway_schema_history判断是否为新增文件。如果是新增的文件,则执行该迁移文件。如果不是,则忽略。
在群里看到有人说了这个,就看了下
- 对 jpa 用处不大,但是这个可以清晰的看见版本的更迭和历史sql
Demo使用
创建一个项目
数据库随便 数据库操作工具随便
引入 flyway 依赖
<!--引入flyway-->
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>6.1.0</version>
<!--<version>7.8.2</version> 2021.05.08目前最新版本-->
</dependency>
简单配置
## application.properties
##server.port=1234
##spring.jpa.show-sql=true
##spring.datasource.url=jdbc:mysql://192.168.0.3:3306/flyway
##spring.datasource.password=root
##spring.datasource.username=root
##spring.profiles.active=flyway
## https://zhuanlan.zhihu.com/p/304110137
spring:
flyway:
# 是否启用flyway
enabled: true
# 编码格式,默认UTF-8
encoding: UTF-8
# 迁移sql脚本文件存放路径,默认db/migration
locations: classpath:db/migration
# 迁移sql脚本文件名称的前缀,默认V
sql-migration-prefix: V
# 迁移sql脚本文件名称的分隔符,默认2个下划线__
sql-migration-separator: __
# 迁移sql脚本文件名称的后缀
sql-migration-suffixes: .sql
# 迁移时是否进行校验,默认true
validate-on-migrate: true
# 当迁移发现数据库非空且存在没有元数据的表时,自动执行基准迁移,新建schema_version表
baseline-on-migrate: true
开始使用
在
resources``
目录下新增目录db/migration
- 默认是
db/migration
- 可以自定义
- 配置文件中:
spring.flyway.locations
属性新建一个SQL**就代表一个版本
- V版本号__描述.sql
V
是根据sql-migration-prefix
中的设置.sql
是根据sql-migration-suffixes
中的设置__
是根据sql-migration-separator
中的设置
- v.1 创建表
```sql
文件名解释 V版本号__描述
create table flyway.tb_user( id INT NOT NULL AUTO_INCREMENT, user_name VARCHAR(100) NOT NULL, nick_name VARCHAR(40) NOT NULL, create_date DATETIME default CURRENT_TIMESTAMP comment ‘创建时间’, PRIMARY KEY ( id ) );
INSERT INTO flyway
.tb_user
(user_name
, nick_name
) VALUES ( ‘谭^’, ‘谭^’);
- v.2 新增字段
```sql
## 文件名解释 V版本号__描述
ALTER TABLE `tb_user`
ADD COLUMN `sex` int(4) NOT NULL DEFAULT 1 COMMENT '0:未知,1:男,2:女。目前为止只有两个状态' AFTER `nick_name`;
INSERT INTO `tb_user` (`user_name`, `nick_name`) VALUES ( '谭^1', '谭^1');
```
使用注意
success 为 0 的时候
flyway 脚本执行失败的话会导致服务启动失败,success 为 0 的时候,修改正确之后不会重新加载脚本,需要删掉flyway记录表的那条数据。