码迷,mamicode.com
首页 > 数据库 > 详细

Springboot集成flywaydb支持多数据源

时间:2021-04-15 12:02:41      阅读:0      评论:0      收藏:0      [点我收藏+]

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

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 }

 

Springboot集成flywaydb支持多数据源

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

原文地址:https://www.cnblogs.com/itfeng813/p/14657415.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!