在做一些小创新实验编程或者是项目开发中(非CodeFirst开发模式),对于数据库的一些脚本管理常常使人头疼,至少在过一段时间再去处理的时候,下面不得不说一个小工具:https://flywaydb.org/

可以很好的记录你每次的数据库脚本处理记录,防止脚本重复操作或者忘记操作等等问题。如果多人使用同一个数据库开发,也可以看到每次数据库的更新记录,如果是多人使用本地的数据库,在后期合并也可以使用各自的脚本来统一执行合并,减少合并的风险和工作量。这个体验有点类似于CodeFirst的开发模式,先写代码然后自动同步到数据库,每次的代码更新都会被记录到数据库中。

下面就基于SpringBoot,MyBatis,H2来简单的介绍使用Flyway的功能。

使用

  1. 在POM文件中加入必要的依赖文件:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    
    <!--H2-->
    <dependency>
      <groupId>com.h2database</groupId>
      <artifactId>h2</artifactId>
      <version>1.4.197</version>
    </dependency>
    <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-boot-starter</artifactId>
      <version>3.3.2</version>
    </dependency>
       
    <!--需要注意的h2的版本需要依赖和插件的一致-->
    <plugin>
      <groupId>org.flywaydb</groupId>
      <artifactId>flyway-maven-plugin</artifactId>
      <version>6.5.4</version>
      <configuration>
        <url>jdbc:h2:file:./target/reward</url>
        <user>root</user>
        <password>test</password>
      </configuration>
      <dependencies>
        <dependency>
          <groupId>com.h2database</groupId>
          <artifactId>h2</artifactId>
          <version>1.4.197</version>
        </dependency>
      </dependencies>
    </plugin>
    <!-- 这里的url的地址需要和配置文件中的url的地址保持一致 -->
    
  2. application.yml配置文件的更新

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    
    server:
      port: 8080
      servlet:
        context-path: /tf
       
    spring:
      h2:
        console:
          enabled: true
          path: /h2
      datasource:
        url: jdbc:h2:file:./target/reward
        username: root
        password: test
        driver-class-name: org.h2.Driver
       
    # url的地址需要配置和插件的url的一致
    
  3. 在 src/main/resources/db/migration 目录下创建脚本文件

    1
    2
    3
    4
    5
    6
    7
    8
    
    -- 这里需要注意些细节
    -- V是必须要大写的,flyway是通过命名约定的,
    -- V1.1.1__xxxxx.sql,V1__xxx.sql等等都可以
    -- 切记是两个小下划线,这个容易看错的。
    -- 如果想重复执行的脚本,那么开头使用大写字母R
    -- 例如:R__People_view.sql 
    -- 重复脚本详细的可以参考:https://flywaydb.org/getstarted/repeatable#creating-a-repeatable-migration
    V1__Create_user_table.sql
    
  4. 执行flyway命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    # 查看当前的flyway的一些状态信息,有哪些脚本需要执行等等
    mvn flyway:info
       
    # 执行脚本处理
    mvn flyway:migrate
       
    # 删除所有的表,视图,存储过程等等
    # 请在测试和开发环境下使用,生产环境切记不要使用,太危险了。
    mvn flyway:clean
    
  5. 后续有新的脚本,只需要根据现有的版本号叠加自己创建好了。

总结

如果SpringBoot,Mybatis,H2的一些基本操作不熟悉可以参考:https://www.7benshu.com/post/2020/08/17440225a1d36a462ba72491eaf38ae41b/

有了Flyway的加入,可以大胆的尝试自己的想法和实践,后期复盘项目可以很直观的总结出一些心得和方法论出来。