什么是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
| Name | Description |
|---|---|
| migrate | Migrates the database |
| clean | Drops all objects in the configured schemas |
| info | Prints the details and status information about all the migrations |
| validate | Validates the applied migrations against the ones available on the classpath |
| baseline | Baselines an existing database, excluding all migrations up to and including baselineVersion |
| repair | Repairs 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
介绍Flyway工具,用于管理数据库变更。支持不同环境配置,通过Maven插件实现自动化迁移。
809

被折叠的 条评论
为什么被折叠?



