Flayway 是一款数据库版本控制管理工具,,支持数据库版本自动升级。
为什么把 FlyWay 放在开始位置呢? 因为这一步可以生成数据库,后续的所有步骤,都是根据这一步来的。
Flyway 已经深度集成到 SpringBoot 中了,基本上不用什么配置,就可以使用 Flyway 了。
确保你的 Mysql 数据库是可以连接的。例如下面手工创建一个测试的数据库。
create database wk_example
单独建立了一个flyway.gradle
文件。这样在整个工程中的项目都可以引用这个文件。
dependencies {implementation "org.flywaydb:flyway-mysql"implementation "org.flywaydb:flyway-core"}
io.spring.dependency-management
在你的项目 gradle 中引用:
apply from: rootProject.file("gradle/flyway.gradle")
这里不用配置 flyway 的内容,只用配置spring.datasource
就可以了。如果想深度配置flyway
,那么看后面的内容。
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverpassword: 123url: jdbc:mysql://127.0.0.1:3306/wk_example?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghaiusername: root
wk_example
。 不然会报错,系统提示找不到数据库。在wukong-boot-db
中建立db
目录,然后在db
目录下建立migration
目录。最后在这个目录下填写 Sql 脚本。
文件名是V1__Create_student_table.sql
。这个测试的文件可以在wukong-boot-db工程下test下的resource.db.migration
中找到。
flyway
官方的文档。Mysql
新的版本中,用utf8mb4
代替了utf8
启动程序,会自动生成数据库。
flyway_schema_history
是 flyway 自带的表这是一个低级错误,没有执行下面创建数据库的步骤,就启动了程序。
create database wk_example
然后系统提示下面的错误,下面的提示会以为你的 Mybatis 配置错误了,会把你引入误区。
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'dbService': Unsatisfied dependency expressed through field 'selectMapper': Error creating bean with name 'selectMapper' defined in file [/home/fanhl/01-java/wukong/wukong-framework/wukong-boot/wukong-boot-db/build/classes/java/main/com/wukong/db/controller/dao/SelectMapper.class]: Cannot resolve reference to bean 'sqlSessionTemplate' while setting bean property 'sqlSessionTemplate'
最简单的解决方案
application.yml
文件中添加下面配置,会自动create database
。 当然你也可以手工配置。
context:initializer:classes: com.wukong.db.initializer.CheckDbInitializer
文件需要放在 db/migration
目录下。 更多的内容参考官网。
V1__Create_student_table.sql
Flyway 的其他参数配置
spring:flyway:baseline-version: 1 # 开始执行基准迁移时对现有的schema的版本打标签,默认值为1.baseline-description: first migration # 对执行迁移时基准版本的描述baseline-on-migrate: true # 当迁移时发现目标schema非空,而且带有没有元数据的表时,是否自动执行基准迁移,默认false.check-location: true # 检查迁移脚本的位置是否存在,默认false.clean-on-validation-error: false # 当发现校验错误时是否自动调用clean,默认false.encoding: UTF-8 # 设置迁移时的编码,默认UTF-8.ignore-future-migrations: true # 在读取模式历史记录表时是否忽略将来的迁移。init-sqls: # 当初始化好连接时要执行的SQL.out-of-order: false # 是否允许无序的迁移,默认false.placeholder-prefix: # 设置每个placeholder的前缀,默认${.placeholder-suffix: # 设置每个placeholder的后缀,默认}.schemas: # 设定需要flyway迁移的schema,大小写敏感,默认为连接默认的schema.sql-migration-prefix: # 迁移文件的前缀,默认为V.sql-migration-separator: # 迁移脚本的文件名分隔符,默认__sql-migration-suffixes: # 迁移脚本的后缀,默认为.sqltable: # 使用的元数据表名,默认为schema_versionvalidate-on-migrate: true # 迁移时是否校验,默认为true.
参考文档