一、引入依赖(以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