flyway数据库改动版本控制工具
-
flyway解决了什么问题
程序编写过程中,初始化数据库的sql,表结构变化sql,因为表结构变化所以有些老数据需要通过一些sql来处理。这样的sqll通常做法是卸载投产清单里面的。如果有人没按照投产清单来,这部分修改就会出错。flyway 可以来管理投产清单里面的sql,通过版本和历史记录,在程序启动的时候对比上次已经执行过的历史版本,然后确定那些版本的sql 需要执行。
-
flyway 怎么使用
-
导入maven配置
<!--flyway--> <dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> <version>8.0.5</version> </dependency>
-
配置参数
-
flyway:
enabled: true
locations: classpath:db/migration
sql-migration-prefix: V #前缀
sql-migration-suffixes: .sql #后缀
sql-migration-separator: __ #分隔符,分割版本号和sql名字 格式为:V版本号__sqlName.sql
validate-on-migrate: true #启动的时候是否要验证
baseline-on-migrate: true # 对于已经有数据表的项目,可以冲 baseline 以上的版本来时执行 sql 脚本名(默认是关闭)
baseline-version: 0 # 基础版本,配合 baseline-on-migrate: true 使用
- sql脚本
-
flyway使用的时候需要注意什么
flyway通过checksum字段来区分sql是否被修改过,正常我们的老的sql版本不应该直接修改,而是新建一个心得版本来修正老的版本,直接修改老版的sql会导致checksum和已经执行过的sql记录对应不上,程序启动报错 -
checksum 是什么怎么计算的?
-
R开头的sql不重复执行问题?
R开头的重复执行条件是里面的内容有修改导致checkSun变动,就会在下次重启的时候重复执行,所以R开的语句可以直接修改,但是一定要支持sql 重跑,只要和上个版本的checksum不同就会重新执行
V开头的不允许修改,只能在新的文件中追加修改 -
flyway目录下面可以建立任意子目录,sql文件可以按照任意顺序放到子目录中,只有V后面的版本影响顺序,并且R开头的总是在后面V开头的后面执行
-
一些配置解释
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.enabled 是否开启flywary,默认true.
flyway.encoding 设置迁移时的编码,默认UTF-8.
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的前缀,默认${.
flyway.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 插件,感觉不是很必要,使用的话还要单独制定数据库地址,程序启动会读取datasource,插件不会需要配置flyway.url,flyway.user,flyway.password等
<!--flyway插件--> <plugin> <groupId>org.flywaydb</groupId> <artifactId>flyway-maven-plugin</artifactId> <version>8.0.5</version> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.22</version> <scope>runtime</scope> </dependency> </dependencies> <configuration> <user>root</user> <password>root</password> <url>jdbc:mysql://192.168.100.66:3306/hl</url> <schemas> <schema>hl</schema> </schemas> </configuration> </plugin>
能耍的时候就一定要耍,不能耍的时候一定要学。
--天道酬勤,贵在坚持posted on 2022-12-02 01:06 zhangyukun 阅读(627) 评论(0) 编辑 收藏 举报