商务网站开发入门这门选修课已经结课了,学生的做业也提交了有一段时间了,出分迫在眉睫,此次评阅采用了多人阅卷的方式,相较于做业系统以前由一我的批阅做业的方式,公平了很多,做业状态由原来的已评阅和未评阅改成未评阅、评阅中、已评阅,表示评阅的字段由reviewed改成status,因为要在数据表层面直接操做,所以要用到SQL语句,当时第一想法是在实体类里加status字段,而后在仓库层手写SQl,判断reviewed属性为1(评阅完成)的,status赋值为2(已评阅),其余的均为0,直到老师提到flyway,我才知道还有这么神奇的工具。git
说来也巧,在老师提到flyway二十分钟以前,我看到了黄庭祥学长写的关于flyway的博客:flyway数据库管理,也许这就是缘分吧,当时好像要查一些关于SQL的东西,依稀记得学长写过,虽然说到最后没找到,可是却阴差阳错发现了这个,虽然说没咋看明白,可是感受也挺好。
进入flyway官网,首先展现的是一段话:github
数据库的版本控制。
跨全部环境的健壮的模式演化。
轻松,愉快和朴素的SQL。
对于flyway,有的博客是这样介绍的:spring
Flyway 是一款开源的数据库版本管理工具,它更倾向于规约优于配置的方式。Flyway 能够独立于应用实现管理并跟踪数据库变动,支持数据库版本自动升级,而且有一套默认的规约,不须要复杂的配置,Migrations 能够写成 SQL 脚本,也能够写在 Java 代码中,不只支持 Command Line 和 Java API,还支持 Build 构建工具和 Spring Boot 等,同时在分布式环境下可以安全可靠地升级数据库,同时也支持失败恢复等。
第一次成功运行会生成一个名为"flyway_schema_history"的数据表,以后进行管理都是基于该表
其工做原理以下:数据库
首先在pom.xml文件中引入依赖:segmentfault
<!-- flyway --> <dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> </dependency>
这部分是没有写全的,由于不一样的Spring版本引入的依赖是不同的,以前也没了解过,真的不知道每一个Spring版本都对应一个稳定的依赖包,后来看了喜硕学长关于flyway的博客:flyway 实践,才知道居然有这种事,对于这种现象,学长是这样解释的:安全
spring-boot
项目依赖于spring-boot-dependencies
项目,该项目中管理了全部被spring-boot
整合过的技术的版本号。
去文件内搜索flyway
,即找到相关的配置<flyway.version>5.0.7</flyway.version>
。
spring-boot
规定好了,若是你用的是spring-boot 2.0.5.RELEASE
版本,那建议使用flyway:5.0.7
。
这样管理一是方便,还有一个缘由我以为是避免冲突。
当引入多个包的时候,就可能会出现版本冲突,我相信,spring-boot
确定是将这些版本通过测试的,保证了无冲突才会推荐使用这些版本的。app
而后我找到了依赖文件,找到flyway对应的版本:
而后添加到依赖中便可:分布式
<!-- flyway --> <dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> <version>6.0.8</version> </dependency>
而后配置application.yaml的flyway字段:spring-boot
flyway: enabled: true baseline-on-migrate: true baseline-version: 1 check-location: true
enabled表示是否开启flywary baseline-on-migrate表示当迁移时发现目标schema非空,并且带有没有元数据的表时,是否自动执行基准迁移,默认false. baseline-version表示开始执行基准迁移时对现有的schema的版本打标签,默认值为1. check-location表示检查迁移脚本的位置是否存在,默认false.
接下来,就是引入SQL文件,在resources文件下新建db文件,在db文件中新建migration(迁移)文件,这是flyway默认的检索路径,接下来就是导出数据库,转储SQL文件,导出:
而后对SQL文件重命名:工具
这样是为了进行版本控制,便于后续的执行,此后的命名版本号都不得低于该版本,若是后续还要进行其余操做,只需新建文件,而后编写SQL便可。
点击运行,查看数据库里的 flyway_schema_history 表单,有对应版本的SQL文件成功执行的记录
值得注意的是,启用flyway以后,hibernate的ddl-auto属性要改成validate,即验证,当实体定义的字段类型与SQL表里的不一样或者不存在时,会终止程序运行,防止字段出现冲突致使程序出现大问题。
以后要想对字段进行修改,不只要修改实体字段,还要编写SQL,进行版本的迁移,一篇好的博客,真的让观看的人恍然大悟,看了喜硕学长的博客,真的明白了好多,还顺利的把flyway应用到了系统中,在此特别表达对喜硕学长的感谢。