flyway数据库改动版本控制工具

  1. flyway解决了什么问题
    程序编写过程中,初始化数据库的sql,表结构变化sql,因为表结构变化所以有些老数据需要通过一些sql来处理。这样的sqll通常做法是卸载投产清单里面的。如果有人没按照投产清单来,这部分修改就会出错。

    flyway 可以来管理投产清单里面的sql,通过版本和历史记录,在程序启动的时候对比上次已经执行过的历史版本,然后确定那些版本的sql 需要执行。

  2. 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脚本
  1. flyway使用的时候需要注意什么
    flyway通过checksum字段来区分sql是否被修改过,正常我们的老的sql版本不应该直接修改,而是新建一个心得版本来修正老的版本,直接修改老版的sql会导致checksum和已经执行过的sql记录对应不上,程序启动报错

  2. checksum 是什么怎么计算的?

  3. R开头的sql不重复执行问题?
    R开头的重复执行条件是里面的内容有修改导致checkSun变动,就会在下次重启的时候重复执行,所以R开的语句可以直接修改,但是一定要支持sql 重跑,只要和上个版本的checksum不同就会重新执行
    V开头的不允许修改,只能在新的文件中追加修改

  4. flyway目录下面可以建立任意子目录,sql文件可以按照任意顺序放到子目录中,只有V后面的版本影响顺序,并且R开头的总是在后面V开头的后面执行


  5. 一些配置解释
    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

  6. 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  阅读(610)  评论(0编辑  收藏  举报

导航