Flyway是一个开源的数据库迁移工具,用于管理和自动化数据库架构的演进。它允许开发人员和团队对数据库进行版本控制,并通过简单的命令行或脚本化操作管理数据库结构和数据的变更。
- 官网下载:https://flywaydb.org/download
- 这里下载的是社区免费版,flyway也提供了专业版和社区版,都是收费的
- 下载完成后配置好对应的环境变量:
flyway -v
1. flyway中的SQL脚本命名
- 在Flyway中,SQL脚本的命名遵循一定的规则。通常,脚本文件的命名由以下组成:
1、版本号(Version):版本号是指脚本的唯一标识符,用来指示脚本在迁移序列中的顺序。它通常是一个数字或者包含数字的字符串,并且按照一定的命名约定进行排序,例如使用前缀"V"或者"R"加上版本号,如"V1_1"或"R2.0.3"。
2、描述性名称(Description):描述性名称是可选的,但它可以帮助更好地理解脚本的目的和功能。描述性名称通常用下划线或连字符分隔单词,例如"create_table_users"或"add_column_to_orders".
3、文件扩展名(Extension):脚本文件的扩展名通常为.sql,表示它是一个SQL脚本文件。
V1_1__create_table_users.sql
R2.0.3__add_column_to_orders.sql
- Flyway对于版本号的排序是基于字典顺序的,选择一种适合项目需求的版本号命名约定,以确保脚本按正确的顺序执行
2. flyway执行SQL脚本演示
- 如下演示批量执行mysql的脚本,准备好的SQL脚本:
ALL_0_1110__xxx.sql
ALL_1_1_130__xxx.sql
ALL_1_1_131__xxx.sql
- 对应的脚本路径:
E:\xdr project\mysql\all-sql
- 执行以下flyway命令,表示在对应的数据库中执行上述脚本
flyway -locations="filesystem:E:\xdr project\mysql\all-sql", -driver=com.mysql.jdbc.Driver -url=jdbc:mysql://127.0.0.1:3306/test_flyway -user=root -password=root migrate
- 注意:filesystem 对应的路径的路径要用
" "
,不然有点时候识别不了路径 - 或者不用上面配置的执行路径和driver、url、password,直接在flyway安装包根路径下的 conf 目录下 flyway.conf,里面有对应的:
flyway.url=jdbc:mysql://127.0.0.1:3306/test_flyway
flyway.driver=com.mysql.jdbc.Driver
flyway.user=root
flyway.password=root
flyway.locations=filesystem:\\E:\xdr project\mysql\all-sql
- Windows下的
locations
建议这样配置,有的时候很容易识别不了路径
- 配置好数据源信息后,执行命令,效果也是和上面一样的:
flyway migrate
- 最后查看mysql数据库中是否创建了脚本中的表或数据
3. flyway中设置 ${CURRENT_DATE} 为当前时间的值
- 执行上述脚本的时候发现一个问题,脚本中包含执行的时候报错:
insert into xdr_info(a, b)
values('filemanage','${CURRENT_DATE}');
- 报错信息:
${
CURRENT_DATE}. Check your configuration!
Caused by: No value provided for placeholder: ${
CURRENT_DATE}. Check your configuration!
- Flyway 是一个数据库迁移工具,会根据其自身的配置和规则来解析和执行 SQL 脚本。对于占位符 ${CURRENT_DATE},Flyway 需要通过配置文件或命令行参数提供具体的值。如果没有为该占位符提供值,Flyway 将无法解析。
- 需要在 flyway.conf 中配置
${CURRENT_DATE}
,如:
flyway.placeholders.CURRENT_DATE=${java.time.LocalDateTime.now()}
- 或者直接在执行命令的时候加上
flyway -placeholders.CURRENT_DATE=$(date +%Y-%m-%d) migrate
- 这里演示的是mysql脚本执行,flyway工具可以和市面上大部分常见的数据库配合使用,对应的驱动啥的也不用单独再下载,都是flyway的安装包下就有