zoukankan      html  css  js  c++  java
  • Spring Boot中使用Flyway来管理数据库版本

      flyway是一个开源的数据库迁移工具。类似于数据库的版本控制工具。flyway的数据库修改文件默认放在resource下的db.migration文件夹中,以V{version_number}__{description}的格式命名。各脚本的执行信息会在数据库的schema_version表中做详细记录。每一次编译或运行时,会自动根据schema_version表中的记录,执行还未记录的脚本,保证数据库更新到最新。使用flyway是一种保证处于持续开发或多人并行开发情况下项目的数据库(包括本地数据库)保持一致的有效方法。那么springboot项目中如何集成flyway呢?

      第一步,在pom.xml中增加flyway的依赖:

    <dependency>
        <groupId>org.flywaydb</groupId>
        <artifactId>flyway-core</artifactId>
        <version>5.0.3</version>
    </dependency>

      第二步,按Flyway的规范创建版本化的SQL脚本。在工程的src/main/resources目录下创建db/migration目录,在db/migration目录下创建版本化的SQL脚本V1__Base_version.sql

    DROP TABLE IF EXISTS user ;
    CREATE TABLE `user` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
      `name` varchar(20) NOT NULL COMMENT '姓名',
      `age` int(5) DEFAULT NULL COMMENT '年龄',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

      在这里需要强调的一点是,version_number必须按增序添加。flyway每次执行会检查所有的migration脚本,如果发下有未执行但是version_number早于已执行过的脚本存在,就会抛出异常。

      最后在spring boot的配置文件application.properties中,加入数据库链接基本信息。需要提前创建migration数据库,并给用户root CRUD权限。

    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/migration?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE&useSSL=false
    spring.datasource.username=root
    spring.datasource.password=root
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver

      准备完毕后,去控制台执行mvn clean install -DskipTests,项目会自动重新编译,编译时就会检查migration脚步并执行相应脚本。

    2018-03-31 10:18:33,867  INFO DatabaseFactory:44 - Database: jdbc:mysql://127.0.0.1:3306/migration (MySQL 5.7)
    2018-03-31 10:18:33,975  INFO DbValidate:44 - Successfully validated 1 migration (execution time 00:00.016s)
    2018-03-31 10:18:34,089  INFO JdbcTableSchemaHistory:44 - Creating Schema History table: `migration`.`flyway_schema_history`
    2018-03-31 10:18:35,081  INFO DbMigrate:44 - Current version of schema `migration`: << Empty Schema >>
    2018-03-31 10:18:35,090  INFO DbMigrate:44 - Migrating schema `migration` to version 1 - demo base

      进入数据库,看是否执行成功。

    mysql> use migration;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    mysql> show tables;
    +-----------------------+
    | Tables_in_migration   |
    +-----------------------+
    | flyway_schema_history |
    | user                  |
    +-----------------------+
    2 rows in set (0.00 sec)

      以后涉及到数据库变动,直接在db.migration中根据命名规则加入相应的SQL或java脚本,在编译时都会自动执行数据库迁移了,是不是很方便啊。

      

  • 相关阅读:
    Misc1
    PXE
    VCL
    pacman usage
    .vimrc的配置
    Windows Server 2012 R2
    Windows 入门杂乱无章版
    VS Code Plugins And Configuration
    「Poetize5」GF弹钢琴
    「Poetize4」上帝造题的七分钟2
  • 原文地址:https://www.cnblogs.com/senlinyang/p/8681192.html
Copyright © 2011-2022 走看看