这是我参与11月更文挑战的第20天,活动详情查看:2021最后一次更文挑战
flyway为数据库控制插件,使所有的数据库脚本都在ide(idea,eclipse等)中控制,这样能做到版本有迹可循。
这里需要注意如果使用flyway 就要禁止在数据库管理软件中更改数据库表结构
一.springboot整合flyway
1.pom.xml
1 | xml复制代码 <dependency> |
2.application.yml
1 | yaml复制代码spring: |
在第一次初始化时有可能出现以下错误,需要加上 placeholder-replacement: false。
3.脚本结构
在定义初始化脚本时,版本号建议为V+(编号)+__(为双下划线)+业务名称+init,例如楼主的 V1__systemportal_init.sql。
在定义变更版本时,版本号为 V+(编号)+__(为双下划线)+操作+表名称,例如楼主的为V2__update_table.sql。
其中V1__systemportal_init.sql(初始化脚本)为项目所有的表结构与数据 以下方式导出。
V2__update_table.sql为变更版本(表结构变化的脚本,如果没有变更,只存在init脚本即可)其中内容如下 。
1 | sql复制代码 ALTER TABLE "systemportal"."task_plan" |
执行以上操作后,将原数据库表数据全部删除(记得做好备份) 然后启动项目,即可在数据库中生成表,说白了,就是按照db中的脚本依次执行一遍。
二.原理
当使用flyway时,会生成一个记录表,记录当前已经执行的脚本名称。(script字段就是已经执行了的db中的脚本)
根据上文,在初始化时会产生以下记录。
如果再次启动时,会查询该表是否有大于V2版本的脚本,如果有执行这些脚本 如果没有什么也不执行。
三.整合quartz
当整合quartz时,需要查询表,但是因为使用了flyway此时并没有表结构,所以需要处理。
1.注释掉@PostConstruct中内容
2.添加配置
添加以下配置(在启动后执行)
1 | java复制代码@Component |
本文转载自: 掘金