前言
商务网站开发入门这门选修课已经结课了,学生的作业也提交了有一段时间了,出分迫在眉睫,这次评阅采用了多人阅卷的方式,相较于作业系统之前由一个人批阅作业的方式,公平了不少,作业状态由原来的已评阅和未评阅改为未评阅、评阅中、已评阅,表示评阅的字段由reviewed改为status,由于要在数据表层面直接操作,因此要用到SQL语句,当时第一想法是在实体类里加status字段,然后在仓库层手写SQl,判断reviewed属性为1(评阅完成)的,status赋值为2(已评阅),其他的均为0,直到老师提到flyway,我才知道还有这么神奇的工具。
flyway
说来也巧,在老师提到flyway二十分钟之前,我看到了黄庭祥学长写的关于flyway的博客:flyway数据库管理,也许这就是缘分吧,当时好像要查一些关于SQL的东西,依稀记得学长写过,虽说到最后没找到,但是却阴差阳错发现了这个,虽说没咋看明白,但是感觉也挺好。
进入flyway官网,首先展示的是一段话:
数据库的版本控制。
跨所有环境的健壮的模式演化。
轻松,愉快和朴素的SQL。
对于flyway,有的博客是这样介绍的:
Flyway 是一款开源的数据库版本管理工具,它更倾向于规约优于配置的方式。Flyway 可以独立于应用实现管理并跟踪数据库变更,支持数据库版本自动升级,并且有一套默认的规约,不需要复杂的配置,Migrations 可以写成 SQL 脚本,也可以写在 Java 代码中,不仅支持 Command Line 和 Java API,还支持 Build 构建工具和 Spring Boot 等,同时在分布式环境下能够安全可靠地升级数据库,同时也支持失败恢复等。
第一次成功运行会生成一个名为"flyway_schema_history"的数据表,之后进行管理都是基于该表
其工作原理如下:
配置应用flyway
首先在pom.xml文件中引入依赖:
<!-- 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
肯定是将这些版本经过测试的,保证了无冲突才会推荐使用这些版本的。
然后我找到了依赖文件,找到flyway对应的版本:
然后添加到依赖中即可:
<!-- flyway -->
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>6.0.8</version>
</dependency>
然后配置application.yaml的flyway字段:
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应用到了系统中,在此特别表达对喜硕学长的感谢。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。