开发过程中经常会遇到发布不同环境时需要更新对应的数据库脚本,未集成前,需手动将增量脚本在目标库执行一遍,有时候还得比对下哪些是本次升级需要执行的脚本,非常麻烦!
第一种:启动时自动升级数据库版本
1)pom.xml增加flyway依赖
测试用h2数据库,所以此处加入h2的依赖
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>8.5.13</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.1.214</version>
</dependency>
2)application.yml文件中增加flyway的配置
#application.yml
spring:
profiles:
active: dev
flyway:
# 数据库连接url
url: jdbc:h2:~/testh2
# 数据库用户名
user: test
# 数据库密码
password: test
#驱动类名
driverClassName: org.h2.Driver
# 启用或禁用 flyway
enabled: true
##生成环境一定要禁用clean
clean-disabled: true
##数据库升级文件的路径
locations: classpath:/db/migration
# 设置为 true 后 flyway 将在需要 baseline 的时候, 自动执行一次 baseline。
baseline-on-migrate: true
# 是否允许不按顺序迁移 开发建议 true 生产建议 false
out-of-order: false
# 执行迁移时是否自动调用验证,当你的版本不符合逻辑,比如你先执行了DML而没有对应的DDL会抛出异常
validate-on-migrate: true
validate-migration-naming: false
3)按照配置,在项目resources目录下创建数据库文件路径,如下图
重点!!!(数据文件格式一定要对,否则flyway识别不了)
至此springboot已接入flyway,每次启动springboot程序时,会自动检测resourses目录下/db/migration目录下的数据文件,依次写入到数据库,如下截图
如新增一个脚本文件
重新启动springboot程序
第二种:使用maven插件执行命令手动升级数据库版本
1)pom.xml plugins增加flyway插件,在plugins下增加
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>8.5.13</version>
<!-- 关联数据库账号与密码 -->
<configuration>
<url>jdbc:h2:~/testh2</url>
<user>test</user>
<password>test</password>
<locations>
<location>classpath:/db/migration</location>
</locations>
</configuration>
<dependencies>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.1.214</version>
</dependency>
</dependencies>
</plugin>
2)在项目根目录执行命令手动升级数据库版本
命令:mvn compile fly:migrate
以上命令执行完后,输出信息中可以看到类似上面第一种方式
附:
右侧可以看到flyway所有的命令