资讯专栏INFORMATION COLUMN

Java敏捷数据库迁移框架——Flyway

不知名网友 / 3054人阅读

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

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

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

Java API

命令行

Maven

Gradle

Ant

SBT

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

需要环境

Java 6+

Maven 2+

MySQL

创建项目

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

</>复制代码

  1. mvn archetype:generate -B
  2. -DarchetypeGroupId=org.apache.maven.archetypes
  3. -DarchetypeArtifactId=maven-archetype-quickstart
  4. -DarchetypeVersion=1.1
  5. -DgroupId=foo
  6. -DartifactId=bar
  7. -Dversion=1.0-SNAPSHOT
  8. -Dpackage=foobar

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

</>复制代码

  1. .
  2. |-- pom.xml
  3. `-- src
  4. |-- main
  5. | `-- java
  6. | `-- foobar
  7. | `-- App.java
  8. `-- test
  9. `-- java
  10. `-- foobar
  11. `-- AppTest.java

进入创建的项目

</>复制代码

  1. cd bar
增加Flyway依赖

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

</>复制代码

  1. ...
  2. com.googlecode.flyway
  3. flyway-core
  4. 2.3
  5. mysql
  6. mysql-connector-java
  7. 5.1.6
  8. ...
  9. ...
整合Flyway

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

</>复制代码

  1. package foobar;
  2. import com.googlecode.flyway.core.Flyway;
  3. public class App {
  4. public static void main(String[] args) {
  5. // 创建Flyway实例
  6. Flyway flyway = new Flyway();
  7. // 设置数据库
  8. flyway.setDataSource("jdbc:mysql://localhost:3306/foobar", "user", "pass");
  9. // 开始迁移
  10. flyway.migrate();
  11. }
  12. }
创建第一个数据迁移

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

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

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

</>复制代码

  1. CREATE TABLE person (
  2. id INT,
  3. name VARCHAR(100)
  4. );
执行程序

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

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

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

</>复制代码

  1. INFO: Creating Metadata table: `foobar`.`schema_version`
  2. Feb 27, 2014 12:20:18 AM com.googlecode.flyway.core.command.DbMigrate migrate
  3. INFO: Current version of schema `foobar`: << Empty Schema >>
  4. Feb 27, 2014 12:20:18 AM com.googlecode.flyway.core.command.DbMigrate applyMigration
  5. INFO: Migrating schema `foobar` to version 1
  6. Feb 27, 2014 12:20:18 AM com.googlecode.flyway.core.command.DbMigrate logSummary
  7. INFO: Successfully applied 1 migration to schema `foobar` (execution time 00:00.194s).
持续增加数据迁移

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

</>复制代码

  1. INSERT INTO person (id, name) VALUES (1, "Axel");
  2. INSERT INTO person (id, name) VALUES (2, "Mr. Foo");
  3. INSERT INTO person (id, name) VALUES (3, "Ms. Bar");

执行命令

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

输出如下

</>复制代码

  1. Feb 27, 2014 12:25:00 AM com.googlecode.flyway.core.command.DbMigrate migrate
  2. INFO: Current version of schema `foobar`: 1
  3. Feb 27, 2014 12:25:00 AM com.googlecode.flyway.core.command.DbMigrate applyMigration
  4. INFO: Migrating schema `foobar` to version 2
  5. Feb 27, 2014 12:25:00 AM com.googlecode.flyway.core.command.DbMigrate logSummary
  6. INFO: Successfully applied 1 migration to schema `foobar` (execution time 00:00.047s).
总结

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/17454.html

相关文章

  • Java敏捷据库迁移框架——Flyway

    摘要:看看自己的项目的那些文件或者干脆连个建表语句都没有的同学是否会有想法把他们管理起来呢向大家推荐一款非常轻量级的敏捷数据库迁移框架。 showImg(http://segmentfault.com/img/bVbV7p); 看看自己的项目的那些SQL文件或者干脆连个建表语句都没有的同学是否会有想法把他们管理起来呢?向大家推荐一款非常轻量级的敏捷数据库迁移框架——Flyway。想知道她有什...

    iflove 评论0 收藏0
  • 【jOOQ中文】3. 据库版本管理工具Flyway

    摘要:一简介什么是是独立于数据库的应用管理跟踪数据库变更的数据库版本管理工具。当升级完成时,数据库表结构及数据应当与升级后的产品版本保持一致。 在执行数据库迁移时,我们推荐使用jOOQ与Flyway - 数据库迁移轻松。 在本章中,我们将简单的来使用这两个框架。 一、Flyway简介 showImg(https://segmentfault.com/img/bVSjro?w=400&h=31...

    AprilJ 评论0 收藏0
  • 微服务化的基石——持续集成

    摘要:一持续集成对于微服务的意义拆之前要先解决合的问题在很多微服务化的文章中,很少会把持续集成放在第一篇,因为大多数的文章都会将如何拆的问题,例如拆的粒度,拆的时机,拆的方式。二持续集成就是不断的尝试在一起集成就是在一起。 此文已由作者刘超授权网易云社区发布。 欢迎访问网易云社区,了解更多网易技术产品运营经验。 一、持续集成对于微服务的意义:拆之前要先解决合的问题 在很多微服务化的文章中,很...

    Yangyang 评论0 收藏0
  • Spring-Boot学习笔记

    摘要:学习笔记使用很容易创建一个独立运行运行内嵌容器准生产级别的基于框架的项目,使用你可以不用或者只需要很少的配置。异常消息如果这个错误是由异常引起的。错误发生时请求的路径。 Spring-Boot 1.5 学习笔记 使用Spring Boot很容易创建一个独立运行(运行jar,内嵌Servlet容器)、准生产级别的基于Spring框架的项目,使用Spring Boot你可以不用或者只需要很...

    curlyCheng 评论0 收藏0

发表评论

0条评论

不知名网友

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<