Flyway 数据库版本管理控制
Flyway 是一个用Java编写的开源数据库版本管理工具,或者说是数据库结构变更工具,主要用于帮助开发和运维更容易地管理数据库演进过程中的各个版本。
Maven 所需的JAR包:
<!--flyway要用到的jar包 -->
<dependency>
<groupId>com.googlecode.flyway</groupId>
<artifactId>flyway-core</artifactId>
<version>2.3.1</version>
</dependency>
下面以Spring Mvc + Spring + Mybatis 框架作为例子:
(1)首先创建flyway函数,用于操作数据库版本管理
package com.lmx.flyway;
import javax.sql.DataSource;
import com.googlecode.flyway.core.Flyway;
public class flywaymigration {
private DataSource dataSource;
private String flywaySchemas;
private String schemaVersion;
private String flywaysLocations;
public DataSource getDataSource() {
return dataSource;
}
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
public String getFlywaySchemas() {
return flywaySchemas;
}
public void setFlywaySchemas(String flywaySchemas) {
this.flywaySchemas = flywaySchemas;
}
public String getSchemaVersion() {
return schemaVersion;
}
public void setSchemaVersion(String schemaVersion) {
this.schemaVersion = schemaVersion;
}
public String getFlywaysLocations() {
return flywaysLocations;
}
public void setFlywaysLocations(String flywaysLocations) {
this.flywaysLocations = flywaysLocations;
}
// 执行数据库版本升级
public void migration() {
Flyway flyway = new Flyway();
flyway.setDataSource(dataSource);
flyway.setLocations(flywaysLocations); // 设置flyway扫描sql升级脚本所在的包
flyway.setEncoding("UTF-8"); // 设置sql脚本文件的编码
// flyway.setOutOfOrder(true);
flyway.setSchemas(flywaySchemas); // 设置接受flyway进行版本管理的多个数据库
flyway.setTable(schemaVersion); // 设置存放flyway 单个数据库版本数据信息的表名
// 设置当validation失败时的系统行为
try {
flyway.setInitOnMigrate(true);
flyway.migrate();
} catch (Exception e) {
flyway.repair();
}
}
}
(2)其次就是配置容器启动时候执行数据库自动升级操作:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test" />
<property name="username" value="root" />
<property name="password" value="" />
</bean>
<!-- spring mybatis.xml -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"
depends-on="flywaymigration" p:dataSource-ref="dataSource" />
<!-- flyway -->
<bean id="flywaymigration" class="com.lmx.flyway.flywaymigration"
init-method="migration">
<property name="dataSource" ref="dataSource" />
<property name="flywaySchemas" value="flywaySchemas_test" />
<property name="schemaVersion" value="schemaVersion_test" />
<property name="flywaysLocations" value="db/migration" />
</bean>
(3) 把版本升级的SQL放到指定升级目录中:(例子目在src\main\resources\db\migration\)
(4) 执行后:
总结不好多多担待,文章只单纯个人总结,如不好勿喷,技术有限,有错漏麻烦指正提出。本人QQ:373965070