Flyway是一个开源的数据库版本管理工具,并且极力主张“约定大于配置”,简单、专注、强大。接下来通过本文给大家介绍SpringBoot使用Flyway进行数据库管理的方法,感兴趣的朋友一起看看吧
目录
一、Flyway简介
二、SpringBoot集成使用
1.pom.xml引入依赖
2.application.properties
4.启动DemoApplication主启动类
三、项目整体结构
一、Flyway简介
Flyway是一款数据库迁移(migration)工具。简单点说,就是在你部署应用的时候,帮你执行数据库脚本的工具。Flyway支持sql和Java两种类型的脚本,你可以将脚本打包到应用程序中,在应用程序启动时,由Flyway来管理这些脚本的执行,这些脚本被Flyway称之为migration。
就目前而言,我们部署应用的流程大概是这样的:
应部署人员拿到应用部署包,备份、替换,以完成应用程序升级
引入Flyway之后的应用部署流程大概是这样的:
开发人员将应用程序打包
应部署人员拿到应用部署包,备份、替换,以完成应用程序升(Flyway将自动执行升级/备份脚本)。
二、SpringBoot集成使用
1.pom.xml引入依赖
4.0.0org.springframework.bootspring-boot-starter-parent2.0.3.RELEASEcom.exampledemo0.0.1-SNAPSHOTdemoDemo project for Spring Boot1.8org.springframework.bootspring-boot-starterorg.springframework.bootspring-boot-starter-testtestMysqLmysql-connector-javaorg.flywaydbflyway-coreorg.springframework.bootspring-boot-starter-jdbcorg.projectlomboklombokorg.springframework.bootspring-boot-maven-plugin
2.application.properties
# 端口 server.port=8082 # 数据源 spring.datasource.driver-class-name=com.MysqL.jdbc.Driver spring.datasource.url=jdbc:MysqL://127.0.0.1:3306/test1?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=PRC&useSSL=false spring.datasource.username=root spring.datasource.password=root # flyway 注:可以完全不用配置 ## sql 脚本的位置,默认为 classpath:db/migration。可手动指定 spring.flyway.locations=classpath:db ## 指定数据源,如果没有指定的话,将使用配置的主数据源 spring.flyway.url=jdbc:MysqL://127.0.0.1:3306/test1?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=PRC&useSSL=false ## Flyway 管理的 Schema 列表,区分大小写。默认连接对应的默认 Schema ## 如果这里明确指定了库名,那么在 spring.flyway.url 连接中指定的库名将无效 spring.flyway.schemas=test1 ## 用户名 spring.flyway.user=root ## 密码 spring.flyway.password=root ## 开启,默认开启 spring.flyway.enabled=true
3.resources创建db数据库脚本文件夹
V0.1.0__init_table.sql-- 创建表 create table t_startAlarm ( id int(100) primary key not null auto_increment, name varchar(100), type varchar(100) )V0.1.1__init_table.sql-- 初始化数据 INSERT INTO t_startAlarm ( id , name , type ) VALUES ('1','电饭煲','用来蒸饭')V0.1.2__init_table.sql-- 初始化数据 INSERT INTO t_startAlarm ( id , name , type ) VALUES ('2','电饭煲2','用来蒸饭2')4.启动DemoApplication主启动类
4.1只有V0.1.0__init_table.sql和V0.1.1__init_table.sql。
项目启动,Flyway 会自动创建一个 flyway_schema_history 表,这个表用来记录数据库的更新历史。
有了这条记录,下次再启动项目,V0.1.1__init_table.sql 这个脚本文件就不会执行了,因为系统知道这个脚本已经执行过了,如果你还想让 V0.1.1__init_table.sql 脚本再执行一遍,需要手动删除 flyway_schema_history 表中的对应记录,那么项目启动时,这个脚本就会被执行了。
注意:
我们在定义脚本的时候,除了 V 字开头的脚本之外,还有一种 R 字开头的脚本,V 字开头的脚本只会执行一次,而 R字开头的脚本,只要脚本内容发生了变化,启动时候就会执行。
使用了 Flyway之后,如果再想进行数据库版本升级,就不用该以前的数据库脚本了,直接创建新的数据库脚本,项目在启动时检测了有新的更高版本的脚本,就会自动执行,这样,在和其他同事配合工作时,也会方便很多。因为正常我们都是从Git 上拉代码下来,不拉数据库脚本,这样要是有人更新了数据库,其他同事不一定能够收到最新的通知,使用了 Flyway就可以有效避免这个问题了。
所有的脚本,一旦执行了,就会在 flyway_schema_history表中有记录,如果你不小心搞错了,可以手动从 flyway_schema_history 表中删除记录,然后修改 sql脚本后再重新启动(生产环境不建议)。
测试数据库中结果:
添加V0.1.2__init_table.sql,测试数据库中结果
三、项目整体结构
参考文章
https://www.cnblogs.com/wangzh1guo/articles/13834706.html