Java使用flyway实现脚本自动化的方法详解
作者:生命猿于运动
如何使用
使用Flyway
,仅需将编写的好SQL语句写成sql脚本文件,根据版本规定填写正确的文件名,存放到指定的目录底下,在项目进行启动时即可自动扫描指定目录底下的脚本,根据数据库Flyway
配置表进行对比,将未执行的脚本按顺序自动执行。
Flyway
脚本迁移文件命名需要遵循以下规则:
如上图,文件命名规范主要分为以下几个部分:
- 前缀:
V
表示版本化迁移,U
表示撤销迁移,R
表示可重复迁移。 - 下划线:在版本号中下划线会被
.
替换。 - 分隔符:两个下划线,用来分隔版本号与文件描述词
- 描述:脚本文件内容的简短描述,执行后内容中的下划线则会被替换为空格。
文件名版本号与文件描述内容以两个下划线分隔开,命名示例:
- V1_20231026154401__create_student_table.sql
- V1_20231026162233__insert_student_data.sql
通常情况下我们都是直接以V
前缀进行命名,在需要进行回退操作时,直接在脚本中写好回退的脚本即可。
更多内容可以参考官方文档说明:https://documentation.red-gate.com/fd/migrations-184127470.html#versioned-migrations
案例分析
首先需要引入flyway依赖包:
<dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> <version>6.4.1</version> </dependency>
在application.yml
文件中添加flyway
相关配置信息,开启flyway
脚本迁移功能:
spring: flyway: # flyway 开启/关闭 enabled: true # 当迁移时发现目标schema非空,而且带有没有元数据的表时,是否自动执行基准迁移,默认false. baseline-on-migrate: true # 是否允许无序的迁移,默认false. out-of-order: true # 迁移时是否校验,默认为true validate-on-migrate: false # 迁移脚本的位置,默认db/migration. locations: classpath:db # flyway 基线版本号 baseline-version: 0 # flyway 执行记录表 table: demo_flyway_schema_history
在上面的配置中也描述了每个属性参数的作用,上面的脚本位置配置的是locations: classpath:db
,在这里我们就可以将需要进行迁移执行的脚本文件,按上面的命名规范配置好之后存放到此目录下:
确认好文件存放位置无误之后,我们就可以直接启动服务:
如图服务启动成功后,我们就可以看到相关flyway
执行的日志信息,如果是首次使用flyway
迁移脚本的话,那么就会自动帮我们创建一个flyway执行记录表,表结构如下:
- installed_rank:主键
- version:版本号
- description:文件描述
- type:脚本类型
- script:完整文件名
- checksum:flyway通过特定的算法根据文件内容计算出来的一个整数,可以简单理解为文件内容的标识符,如果我们在配置中开启校验时(
validate-on-migrate=true
),如果我们文件内容有修改将计算出新的checksum
与执行过的的checksum
不一致时即会报mismatch
的错误,以此来告知开发者脚本有变动。 - installed_by:执行脚本的数据库用户
- execution_time:执行时间
- success:执行结果,0:失败,1:成功
总结
有了这么一个脚本迁移的工具,对于开发人员也好,对运维人员也罢,都能够减轻双方的负担,并且减少在部署时手动去执行脚本出错的风险,好的工具一直在为我们节约更多的时间,用上之后真的停不下来。
以上就是Java使用flyway实现脚本自动化的方法详解的详细内容,更多关于Java flyway实现脚本自动化的资料请关注脚本之家其它相关文章!