zoukankan      html  css  js  c++  java
  • Springboot集成flywaydb支持多数据源

    flyway是一个数据库版本管理工具,集成进springboot后,每次系统升级启动时自动执行sql语句升级数据库,避免手动操作数据库。

    1.maven引入依赖

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

    2.application.properties文件增加配置

    ## 开启,默认开启
    flyway.enabled=true
    ## sql 脚本的位置,默认为 classpath:db/migration。可手动指定
    flyway.locations=classpath:db/sqlVersion
    ## 指定数据源,如果没有指定的话,将使用配置的主数据源
    flyway.url=jdbc:mysql://10.0.192.10:3306/demo?useUnicode=true&useSSL=false&characterEncoding=utf8
    flyway.user=repl
    flyway.password=root
    flyway.check-location=true
    # 如果数据库不是空表,需要设置成 true,否则启动报错
    flyway.baseline-on-migrate=true
    
    #默认初始版本号为1
    
    flyway.baseline-version=0

    3.指定flyway.locations目录下创建sql脚本

    命名规则:源码默认初始版本号为V1,sql脚本版本号需大于1, sql脚本命名 :V版本号__名称.sql,

    注:版本号后面为两条下划线,后续脚本版本号需大于当前最大版本号;

    springboot启动时,加载flyway组件,执行sql脚本。

    首次使用flyway,springboot启动时,会自动创建schema_version表,维护历史sql版本变更信息。

    sql脚本执行顺序为:按版本号从小到大;

    历史sql脚本一旦随springboot启动升级,无论脚本执行成功还是失败,后续开发不能再做修改,否则,springboot启动时由于校验到脚本文件有变更而导致报错,无法启动成功。

    若同时升级多个版本,中间某个版本的脚本执行失败,则执行失败的脚本内操作会回滚,同时,后面的版本不会执行,而且springboot启动失败。

    若脚本执行失败,需要及时处理解决,以下两种解决方式:

    1:删除失败的版本记录,修改脚本,重新打包部署;

    2:更新失败的版本信息字段 success为“1”即成功,新增正确的sql脚本,并赋值新的版本号,然后重新启动springboot, 启动时会忽略失败的版本,继续执行后面的版本;

    schema_version表:

    4.flyway 多数据源配置

      若同一个项目中有多个数据源需要进行版本管理,则需要放弃application.properties中的配置,

      并且配置flyway.enabled=false,禁止springboot自动的调用flyway.migrate()方法。然后增加配置类,手动调用migrate()方法即可。

     1 package cn.demo.test.config;
     2 
     3 import javax.annotation.PostConstruct;
     4 import javax.annotation.Resource;
     5 import javax.sql.DataSource;
     6 
     7 import org.flywaydb.core.Flyway;
     8 import org.springframework.beans.factory.annotation.Autowired;
     9 import org.springframework.context.annotation.Configuration;
    10 
    11 @Configuration
    12 public class FlywayDbInitializer {
    13 
    14     @Resource
    15     private DataSource dataSource;//系统中已经注入的数据源
    16 
    17     @Resource
    18     private DataSource dmDataSource;//多个数据源
    19 
    20     @PostConstruct
    21     public void migrateFlyway() {
    22 
    23         Flyway alertFlyway = new Flyway();
    24         alertFlyway.setBaselineOnMigrate(true);
    25         alertFlyway.setDataSource(dataSource);
    26         alertFlyway.setSchemas("alert");
    27         alertFlyway.setLocations("db/alertVersion");
    28         alertFlyway.setValidateOnMigrate(false);//是否校验checksum值
    29         alertFlyway.setIgnoreFailedFutureMigration(false);
    30         //        alertFlyway.setBaselineVersionAsString("1.1");//基准版本,<=1.1不会执行。
    31         alertFlyway.migrate();
    32         Flyway dmFlyway = new Flyway();
    33         dmFlyway.setDataSource(dmDataSource);
    34         dmFlyway.setBaselineOnMigrate(true);
    35         dmFlyway.setSchemas("data_devops");
    36         dmFlyway.setLocations("db/dataDevopsVersion");
    37         dmFlyway.migrate();
    38     }
    39 }
  • 相关阅读:
    VS2005调试网站时不显示Flash元素
    js中使用弹出窗体
    Ipod Touch/Iphone歌词同步软件整理
    Chrome Dev 4.0.*增加flash支持
    字符串数组排序(qsort参数 比较函数)
    查找两个已经排好序的数组的第k大的元素
    求用1,2,5这三个数不同个数组合的和为100的组合个数
    Hadoop分布式环境下的数据抽样(转)
    Reservoir Sampling
    欧拉回路
  • 原文地址:https://www.cnblogs.com/itfeng813/p/14657415.html
Copyright © 2011-2022 走看看