Flyway详解及Springboot集成Flyway的详细教程
Flayway是⼀款数据库版本控制管理⼯具,,⽀持数据库版本⾃动升级,Migrations可以写成sql脚本,也可以写在java代码⾥;不仅⽀持Command Line和java api ,也⽀持Build构建⼯具和Spring boot,也可以在分布式环境下能够安全可靠安全地升级数据库,同时也⽀持失败恢复。
Flyway最核⼼的就是⽤于记录所有版本演化和状态的MetaData表,Flyway⾸次启动会创建默认名为SCHEMA_VERSION的元素局表。表中保存了版本,描述,要执⾏的sql脚本等;
sql脚本的格式:V+版本号 +双下划线+秒速+结束符
例如:V1__INIT_DATABASE.sql
上⾯的V 是默认值,可以通过
flyway.sql-migration-prefix来指定前缀
Migrate:
Migrate是指把数据Schema迁移到最新版本,在Migrate时会检查MetaData元数据表,如果不存在就创建
MetaData表,MetaData⽤于记录数据库历史变更等信息;Migrate会扫描指定⽂件系统或者classpath下的Migrations。会与MetaData中的记录进⾏对⽐,进⾏版本升级;
Clean:清除掉对应数据库Schema中所有的对象,包括表结构,视图,存储过程等,clean操作在dev 和 test阶段很好⽤;
Info:⽤于打印所有的Migrations的详细和状态信息,也是通过MetaData和Migrations完成的,可以快速定位当前的数据库版本;
validate:验证以及apply的Migrations是否有变更,默认开启的;原理是对⽐MetaData表与本地Migrations的checkNum值,如果值相同则验证通过,否则失败。BaseLine:对已经存在数据库Schema结构的数据库⼀种解决⽅案。实现在⾮空数据库新建MetaData表,并把Migrations应⽤到该数据库;也可以应⽤到已有表结构的数据库中也可以实现添加Metadata表。
repair:repair操作能够修复metaData表,该操作在metadata出现错误时很有⽤
⽤途:
1):移除失败的Migration记录,只针对不⽀持DDL事务的数据库
使⽤Flayway:
1、引⼊flyway的依赖:
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>5.0.3</version>
</dependency>
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>5.0.3</version>
</plugin>
2、新建⼀个maven的Springboot项⽬,在配置⽂件中配置数据源信息:
server.port=8088
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb
spring.datasource.username=root
spring.datasource.password=
spring.datasource.sql.cj.jdbc.Driver
3、在classpath下新建/db/migration⽂件夹,并创建sql脚本⽂件:
use testdb;
CREATE TABLE person (
id int(11) NOT NULL AUTO_INCREMENT,
first varchar(100) NOT NULL,
last varchar(100) NOT NULL,
dateofbirth DATE DEFAULT null,
placeofbirth varchar(100) not null,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into person (first,last,dateofbirth,placeofbirth) values('Dursun','KOC', STR_TO_DATE('02/10/1982', '%m/%d/%Y'),'Erzincan');
insert into person (first,last,dateofbirth,placeofbirth) values('Durseeun','KeeOC', STR_TO_DATE('05/10/1982', '%m/%d/%Y'),'Erzeeincan');
4、启动springboot项⽬:
加载了sql脚本。
5、查看数据库:
⽣成了flyway-schema-history表,这个版本默认是这个表,如果想⾃⼰指定schema表的命,可以设置:
flyway.tableflyway
6:flyway的⼀些其他配置:
flyway.baseline-description对执⾏迁移时基准版本的描述.
flyway.baseline-on-migrate当迁移时发现⽬标schema⾮空,⽽且带有没有元数据的表时,是否⾃动执⾏基准迁移,默认false.
flyway.baseline-version开始执⾏基准迁移时对现有的schema的版本打标签,默认值为1.
flyway.check-location检查迁移脚本的位置是否存在,默认false.
flyway.clean-on-validation-error当发现校验错误时是否⾃动调⽤clean,默认false.
flyway.ignore-failed-future-migration当读取元数据表时是否忽略错误的迁移,默认false.
flyway.init-sqls当初始化好连接时要执⾏的SQL.
flyway.locations迁移脚本的位置,默认db/migration.
flyway.out-of-order是否允许⽆序的迁移,默认false.
flyway.password⽬标数据库的密码.
flyway.placeholder-prefix设置每个placeholder的前缀,默认${.
springboot原理pdfflyway.placeholder-replacementplaceholders是否要被替换,默认true.
flyway.placeholder-suffix设置每个placeholder的后缀,默认}.
flyway.placeholders.[placeholder name]设置placeholder的value
flyway.schemas设定需要flywary迁移的schema,⼤⼩写敏感,默认为连接默认的schema.
flyway.sql-migration-prefix迁移⽂件的前缀,默认为V.
flyway.sql-migration-separator迁移脚本的⽂件名分隔符,默认__
flyway.sql-migration-suffix迁移脚本的后缀,默认为.sql
flyway.tableflyway使⽤的元数据表名,默认为schema_version
flyway.target迁移时使⽤的⽬标版本,默认为latest version
flyway.url迁移时使⽤的JDBC URL,如果没有指定的话,将使⽤配置的主数据源
flyway.user迁移数据库的⽤户名
flyway.validate-on-migrate迁移时是否校验,默认为true.
flyway的⼊门就到这⾥,其他内容后⾯再补上。
到此这篇关于Flyway详解及Springboot集成Flyway的详细教程的⽂章就介绍到这了,更多相关Flyway介绍 Springboot集成Flyway内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。