导入flyway的maven坐标以及插件
<!--flyway 数据库版本管理工具依赖-->
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>5.2.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
这里注意版本,springBoot整合使用5.0以上的,flyway使用jdbc连接数据库
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>4.0.3</version>
</plugin>
然后在根目录下简历文件夹db/migration
这是flyway默认读取sql脚本的文件夹地址,如果要改名字,需要另行配置
文件夹中的sql文件名字有一定规则,随意取名会出错,详细规则如下
- prefix: default: V (大写哦)
- version: 版本号,也可以使用大小版本组合的方式,小版本号用单_区分
- separator: 分隔符,双下划线__
- description: 描述(你懂得,必须要有意义)
- suffix: 后缀 default: .sql
脚本文件中的内容
创建配置类,用于初始化flyway
package com.guoheng.hazard.config;
import org.flywaydb.core.Flyway;
import org.flywaydb.core.api.configuration.FluentConfiguration;
import org.springframework.boot.autoconfigure.flyway.FlywayMigrationStrategy;
import org.springframework.stereotype.Component;
/**
* 类功能描述: 数据库初始化flyway
*
* @author fbl
* @date 2019-12-13 15:50
*/
@Component
public class BaselineOnMigrateMigrationStrategy implements FlywayMigrationStrategy {
@Override
public void migrate(Flyway flyway) {
FluentConfiguration configure = Flyway.configure();
configure.baselineOnMigrate(true);
flyway.migrate();
}
}
当应用程序运行时,数据库会创建一个‘flyway_schema_history’表,表中记录着数据库版本号和描述信息
每当你创建一个新的sql脚本时,运行应用程序,会运行相应的sql脚本,升级你的数据库,并在表中生产相应记录,如果删除记录,再次启动程序时会又一次执行相应的sql脚本。
如果sql脚本已被执行,在修改相对应的sql,再次启动程序会报错
有时候使用过滤器拦截器之类的可能造成无法自动建立表,需要手动建立:
CREATE TABLE `flyway_schema_history` (
`installed_rank` int(11) NOT NULL,
`version` varchar(50) DEFAULT NULL,
`description` varchar(200) NOT NULL,
`type` varchar(20) NOT NULL,
`script` varchar(1000) NOT NULL,
`checksum` int(11) DEFAULT NULL,
`installed_by` varchar(100) NOT NULL,
`installed_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`execution_time` int(11) NOT NULL,
`success` tinyint(1) NOT NULL,
PRIMARY KEY (`installed_rank`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;