Flyway数据库迁移工具

介绍Flyway工具,用于管理数据库变更。支持不同环境配置,通过Maven插件实现自动化迁移。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是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

NameDescription
migrateMigrates the database
cleanDrops all objects in the configured schemas
infoPrints the details and status information about all the migrations
validateValidates the applied migrations against the ones available on the classpath
baselineBaselines an existing database, excluding all migrations up to and including baselineVersion
repairRepairs 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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值