目录
介绍:
flyway可以理解为数据库管理工具,类似SVN,团队开发时用于控制数据库更新迭代。
工作原理
官网:https://flywaydb.org/documentation/getstarted/how
项目创建
创建springboot项目flyway-demo
pom依赖
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> </dependency> <!-- 加载jdbc连接数据库 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> </dependency> </dependencies>
application.properties
#配置pgsql数据源(可自行改成mysql) spring.datasource.url=jdbc:postgresql://localhost:5432/test spring.datasource.username=postgres spring.datasource.password=postgres spring.datasource.driverClassName=org.postgresql.Driver spring.datasource.platform=postgres#flyway 的 clean 命令会删除指定 schema 下的所有 table, 生产务必禁掉。这个默认 false spring.flyway.clean-disabled=true #启用或禁用 flyway spring.flyway.enabled=true #执行迁移时是否自动调用验证 当你的 版本不符合逻辑 比如 你先执行了 DML 而没有 对应的DDL #会抛出异常 spring.flyway.baseline-on-migrate=true #是否允许不按顺序迁移 开发建议 true 生产建议 false spring.flyway.out-of-order=false #SQL 脚本的目录,多个路径使用逗号分隔 默认值 classpath:db/migration spring.flyway.locations=classpath:/db/migration #检查迁移脚本的位置是否存在,默认false spring.flyway.check-location=true # 字符编码 默认 UTF-8 spring.flyway.encoding=UTF-8
sql文件
在resources/db/migration文件夹中放入执行的sql文件
文件名:V1.0.0__test.sql
-- 用户表 CREATE TABLE IF NOT EXISTS public.tb_user ( user_id int8 NOT NULL, -- 用户id,主键 user_name varchar(128) NOT NULL, -- 用户名称 user_age int4 NULL, -- 用户年龄 create_time timestamp NULL, -- 创建时间 update_time timestamp NULL, -- 更新时间 CONSTRAINT pk_tb_user PRIMARY KEY (user_id) );
sql文件命名规则
V+版本号(版本号的数字间以"."或"_"分隔开)+双下划线(用来分隔版本号和描述)+文件描述+后缀名,例如:V1.0.0__test.sql。
注:版本号不能相同!
1.V开头的文件,每个文件只会被执行一次,常用于创建、修改、删除表;插入、修改数据等
2.R开头的文件,校验和变化了就会执行,格式为R__1.0.1update.sql
FlywayDemoApplication启动类
@SpringBootApplication public class FlywayDemoApplication { public static void main(String[] args) { SpringApplication.run(FlywayDemoApplication.class, args); } }
结果
生成flyway_schema_history和tb_user两个表
flyway_schema_history用于记录数据库的更新历史,有数据时,V1.0.0__test.sql就不会再执行了
验证R开头的sql
在resources/db/migration文件夹中放入执行的sql文件
文件名:R1.0.0__update.sql
ALTER TABLE public.tb_user ADD COLUMN IF NOT EXISTS user_email varchar(128) NULL; COMMENT ON COLUMN public.tb_user.user_email IS '邮箱';
重新运行启动类
结果
tb_user新添字段成功,flyway_schema_history新增一条记录