一、引入依赖(以Maven项目为例)
-
spring boot项目首先引入数据库连接驱动依赖
<!-- jdbc 连接依赖,如果使用了mybatis或mybatis-plus,可直接引入对应mybatis依赖 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.1</version> </dependency> <!-- pgsql驱动 --> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.3.1</version> </dependency>
-
引入flyway依赖
<dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> <version>8.0.5</version> </dependency>
二、创建目录
- 在项目资源目录resources下创建flyway脚本目录:db/migration
三、添加配置
-
在Spring boot项目配置文件添加flyway开关配置,及默认脚本存放目录
spring: flyway: enabled: true #是否启用flyway(默认true) locations: classpath:db/migration #sql脚本文件位置
四、编写脚本
- 升级执行脚本,只执行一次,文件名不变就不会再次执行
- 前缀大写V开头;
- 后接版本号,一般为时间字符串,表明sql脚本创建时间,如:2022年5月30日11时29分可写为20220530112900,时间字符串从小到大决定sql脚本执行顺序;
- 后接两个英文下划线__;
-
再添加sql文件的描述,如创建表:create_table_tablename,修改表:alter_table_tablename,插入数据:insert_into_tablename,删除数据:delete_from_tablename
eg: #脚本名称 V20220527090700__create_table_test_event.sql #脚本内容 CREATE TABLE public.test_event ( id int8 GENERATED ALWAYS AS IDENTITY (cache 100) PRIMARY KEY, event_time int8 NOT NULL, event_type int4 NULL, priority int4 NULL, longitude float8 NULL, latitude float8 NULL, altitude float4 NULL, create_time timestamp NULL, latest_update_time timestamp NULL, deleted int2 DEFAULT 0 ); COMMENT ON COLUMN public.event_shadow.event_time IS '事件时间'; CREATE UNIQUE INDEX uindex_sid_eventtime on public.test_event (event_time);
- 重复执行脚本,多次执行,文件内容变化即文件校验和变化时就会执行
- 前缀大写R开头;
- 后接两个英文下划线__;
-
再添加sql文件的描述,如创建表:create_table_tablename,修改表:alter_table_tablename,插入数据:insert_into_tablename,删除数据:delete_from_tablename,描述字符串字典顺序从小到大决定sql脚本执行顺序;
eg:重复执行使用场景可用于配置更新语句,使用覆盖插入语句,每次配置更新可用同一个重复执行文件修改,而非添加一个版本升级文件 #脚本名称 R__insert_into_test_event.sql