好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Springboot集成flywaydb支持多数据源

= 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  }

 

Springboot集成flywaydb支持多数据源

标签:导致   password   init   赋值   数据库   组件   config   location   报错   

查看更多关于Springboot集成flywaydb支持多数据源的详细内容...

  阅读:60次