java迁移框架_Java敏捷数据库迁移框架——Flyway

33eeabb661e6a6de336351b863799c1e.png

image

看看自己的项目的那些SQL文件或者干脆连个建表语句都没有的同学是否会有想法把他们管理起来呢?向大家推荐一款非常轻量级的敏捷数据库迁移框架——Flyway。想知道她有什么魅力吗?

Flyway为大家提供了如下的实现方式:

Java API

命令行

Maven

Gradle

Ant

SBT

为了减少描述难度在这里使用了Java API,项目构建方式为Maven,数据库为MySQL

需要环境

创建项目

首先我们要在命令行中使用Maven原型插件执行如下命令

mvn archetype:generate -B \

-DarchetypeGroupId=org.apache.maven.archetypes \

-DarchetypeArtifactId=maven-archetype-quickstart \

-DarchetypeVersion=1.1 \

-DgroupId=foo \

-DartifactId=bar \

-Dversion=1.0-SNAPSHOT \

-Dpackage=foobar

我们已经准备好开始了。当前项目的结构如下

.

|-- pom.xml

`-- src

|-- main

| `-- java

| `-- foobar

| `-- App.java

`-- test

`-- java

`-- foobar

`-- AppTest.java

进入创建的项目

cd bar

增加Flyway依赖

编辑当前目录下的pom.xml,增加Flyway和MySQL的依赖

...

com.googlecode.flyway

flyway-core

2.3

mysql

mysql-connector-java

5.1.6

...

...

整合Flyway

现在我们可以将Flyway的代码放入项目中,并配置数据库,例如增加到默认生成的:src/main/java/foobar/App.java

package foobar;

import com.googlecode.flyway.core.Flyway;

public class App {

public static void main(String[] args) {

// 创建Flyway实例

Flyway flyway = new Flyway();

// 设置数据库

flyway.setDataSource("jdbc:mysql://localhost:3306/foobar", "user", "pass");

// 开始迁移

flyway.migrate();

}

}

让我们创建第一个数据迁移吧

创建数据迁移目录src/main/resources/db/migration,执行命令

mkdir -p src/main/resources/db/migration

创建我们的第一个数据迁移src/main/resources/db/migration/V1__Create_person_table.sql

CREATE TABLE person (

id INT,

name VARCHAR(100)

);

执行程序

执行App.java(也可以直接在IDE中执行main方法)

mvn package exec:java -Dexec.mainClass=foobar.App -Dmaven.test.skip=true

如果你成功了,应该会得到如下信息

INFO: Creating Metadata table: `foobar`.`schema_version`

Feb 27, 2014 12:20:18 AM com.googlecode.flyway.core.command.DbMigrate migrate

INFO: Current version of schema `foobar`: << Empty Schema >>

Feb 27, 2014 12:20:18 AM com.googlecode.flyway.core.command.DbMigrate applyMigration

INFO: Migrating schema `foobar` to version 1

Feb 27, 2014 12:20:18 AM com.googlecode.flyway.core.command.DbMigrate logSummary

INFO: Successfully applied 1 migration to schema `foobar` (execution time 00:00.194s).

持续增加数据迁移吧

假如我们现在需要增加第二个数据迁移,命名为:src/main/resources/db/migration/V2__Add_people.sql

INSERT INTO person (id, name) VALUES (1, 'Axel');

INSERT INTO person (id, name) VALUES (2, 'Mr. Foo');

INSERT INTO person (id, name) VALUES (3, 'Ms. Bar');

执行命令

mvn package exec:java -Dexec.mainClass=foobar.App -Dmaven.test.skip=true

输出如下

Feb 27, 2014 12:25:00 AM com.googlecode.flyway.core.command.DbMigrate migrate

INFO: Current version of schema `foobar`: 1

Feb 27, 2014 12:25:00 AM com.googlecode.flyway.core.command.DbMigrate applyMigration

INFO: Migrating schema `foobar` to version 2

Feb 27, 2014 12:25:00 AM com.googlecode.flyway.core.command.DbMigrate logSummary

INFO: Successfully applied 1 migration to schema `foobar` (execution time 00:00.047s).

总结

通过Flyway让我们能很方便的管理数据库文件,并进行版本控制。文档地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值