Flyway数据库迁移工具

来源:互联网 发布:淘宝网分期付款流程 编辑:程序博客网 时间:2024/04/27 17:01

什么是Flyway

Flyway(https://flywaydb.org) 是独立于数据库的应用、管理并跟踪数据库变更的数据库版本管理工具。

为什么需要Flyway

  • 不同的开发人员在开发产品特性时,都有可能更新数据库(添加新表,新的约束等)。当开发人员完成工作并提交代码时,代码会被合并到主分支并在测试服务器上执行单元测试与集成测试。同样的需要有配套的数据库脚本更新。
  • 生产系统的自动部署

Flyway使用步骤

Maven依赖定义

<dependency><groupId>org.flywaydb</groupId><artifactId>flyway-core</artifactId><version>4.0.3</version></dependency>

Maven插件方式

<build><pluginManagement><plugins><plugin><groupId>org.codehaus.mojo</groupId><artifactId>properties-maven-plugin</artifactId><version>1.0-alpha-2</version><executions><execution><id>default-cli</id><phase>initialize</phase><goals><goal>read-project-properties</goal></goals><configuration><files></files></configuration></execution></executions></plugin><plugin><groupId>org.flywaydb</groupId>                <artifactId>flyway-maven-plugin</artifactId><version>4.0.3</version><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency></dependencies>                       <configuration><<!-- 设置存放flyway metadata数据的表名 --><table>schema_version</table><!-- 设置flyway扫描sql升级脚本、java升级脚本的目录路径或包路径 --><locations><location>db/migration/reportdb</location></locations><!-- 设置sql脚本文件的编码 --><encoding>UTF-8</encoding><!-- 设置执行migrate操作之前的validation行为 --><validationMode>ALL</validationMode><!-- 设置当validation失败时的系统行为 --><validationErrorMode>FAIL</validationErrorMode></configuration></plugin></plugins></pluginManagement></build>
  • 将sql脚本放在 src/main/resources/db/migration下,命名为 Vxx__xxxxx.sql

SQL 脚本文件及Java 代码类名必须遵循以下命名规则:V<version>[_<SEQ>][__description]

  • 执行maven goal,mvn flyway:migrate

在不同环境从properties中加载不同的数据库配置

  • 配置maven profile。注意需要在每个profile里声明<profile.id>prod</profile.id>

    <profiles><!-- 开发环境 --><profile><activation><activeByDefault>true</activeByDefault></activation><id>dev</id><properties>      <profile.id>dev</profile.id>    </properties><build><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource><resource><directory>src/main/env/dev</directory><includes><include>**/*.*</include></includes><filtering>true</filtering></resource><resource><directory>src/main/resources</directory><includes><include>**/*.*</include></includes><filtering>true</filtering></resource></resources></build></profile><profile><activation><activeByDefault>false</activeByDefault></activation><id>test</id><properties>      <profile.id>test</profile.id>    </properties><build><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource><resource><directory>src/main/env/test</directory><includes><include>**/*.*</include></includes><filtering>true</filtering></resource><resource><directory>src/main/resources</directory><includes><include>**/*.*</include></includes><filtering>true</filtering></resource></resources></build></profile><profile><activation><activeByDefault>false</activeByDefault></activation><id>prod</id><properties>      <profile.id>prod</profile.id>    </properties><build><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource><resource><directory>src/main/env/prod</directory><includes><include>**/*.*</include></includes><filtering>true</filtering></resource><resource><directory>src/main/resources</directory><includes><include>**/*.*</include></includes><filtering>true</filtering></resource></resources></build></profile></profiles>
  • 使用properties-maven-plugin插件从properties中加载配置项的值

    <plugin><groupId>org.codehaus.mojo</groupId><artifactId>properties-maven-plugin</artifactId><version>1.0-alpha-2</version><executions><execution><id>default-cli</id><phase>initialize</phase><goals><goal>read-project-properties</goal></goals><configuration><files><file>src/main/env/${profile.id}/properties/datasource.properties</file></files></configuration></execution></executions></plugin>
  • 修改maven goal 为 properties:read-project-properties flyway:migrate

附录

Flyway Maven Goal

NameDescriptionmigrateMigrates the databasecleanDrops all objects in the configured schemasinfoPrints the details and status information about all the migrationsvalidateValidates the applied migrations against the ones available on the classpathbaselineBaselines an existing database, excluding all migrations up to and including baselineVersionrepairRepairs the metadata table

开源地址

https://flywaydb.org/documentation/maven/#href=https%3A%2F%2Fgithub.com%2Fflyway%2Fflyway&text=Star&data.count.api=%2Frepos%2Fflyway%2Fflyway%23stargazers_count&data.count.href=%2Fflyway%2Fflyway%2Fstargazers&data.count.aria.label=%23%20stargazers%20on%20GitHub&data.style=&data.icon=&aria.label=Star%20flyway%2Fflyway%20on%20GitHub

0 0
原创粉丝点击