1. Flyway

可以将初始化sql在项目启动时候执行,取代单独的DBN更新包

2. 依赖

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

3. 配置说明(springboot配置版本)

配置名 配置说明
flyway.baseline-description 对执行迁移时基准版本的描述.
flyway.baseline-on-migrate 当迁移时发现目标schema非空,而且带有没有元数据的表时,是否自动执行基准迁移,默认false.
flyway.baseline-version 开始执行基准迁移时对现有的schema的版本打标签,默认值为1.
flyway.check-location 检查迁移脚本的位置是否存在,默认false.
flyway.clean-on-validation-error 当发现校验错误时是否自动调用clean,默认false.
flyway.enabled 是否开启flywary,默认true.
flyway.encoding 设置迁移时的编码,默认UTF-8.
flyway.ignore-failed-future-migration 当读取元数据表时是否忽略错误的迁移,默认false.
flyway.init-sqls 当初始化好连接时要执行的SQL.
flyway.locations 迁移脚本的位置,默认db/migration.
flyway.out-of-order 是否允许无序的迁移,默认false.
flyway.password 目标数据库的密码.
flyway.schemas 设定需要flywary迁移的schema,大小写敏感,默认为连接默认的schema.
flyway.sql-migration-prefix 迁移文件的前缀,默认为V.
flyway.sql-migration-separator 迁移脚本的文件名分隔符,默认__
flyway.sql-migration-suffix 迁移脚本的后缀,默认为.sql
flyway.tableflyway 使用的元数据表名,默认为schema_version
flyway.target 迁移时使用的目标版本,默认为latest version
flyway.url 迁移时使用的JDBC URL,如果没有指定的话,将使用配置的主数据源
flyway.user 迁移数据库的用户名
flyway.validate-on-migrate 迁移时是否校验,默认为true.

4. API方式集成

import org.flywaydb.core.Flyway;
import org.flywaydb.core.api.configuration.ClassicConfiguration;
import org.flywaydb.core.api.configuration.Configuration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;
import javax.sql.DataSource;
import java.nio.charset.Charset;/*** @author pp_lan* @description*/
@Component
public class MainDataSourceMigration {private static final Logger LOGGER = LoggerFactory.getLogger(MainDataSourceMigration.class);@Autowired@Qualifier("mainDataSource")private DataSource dataSource;/*** 生成配置* @param location 配置路径* @param dataSource 数据源* @return*/public Configuration buildConfiguration(String location, DataSource dataSource) {ClassicConfiguration configuration = new ClassicConfiguration();configuration.setBaselineOnMigrate(true);configuration.setTable("java_record_version");configuration.setEncoding(Charset.forName("utf-8"));configuration.setOutOfOrder(true);configuration.setLocationsAsStrings(location);configuration.setDataSource(dataSource);return configuration;}@PostConstructpublic void init() {Configuration configuration = buildConfiguration("db/migration/main", dataSource);Flyway flyway = new Flyway(configuration);try {flyway.migrate();LOGGER.info("初始化Sql成功");} catch (Exception e) {flyway.repair();LOGGER.error("初始化Sql异常", e);}}
}

5. 屏蔽配置启动方式

springboot中默认使用flyway配置进行加载,使用api方式进行灵活配置时候需要将其(FlywayAutoConfiguration)进行屏蔽,不然会报错,部分报错信息屏蔽方式如下所示

5.1 报错信息

Caused by: java.lang.reflect.InvocationTargetException: nullat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.springframework.boot.autoconfigure.flyway.FlywayMigrationInitializer.afterPropertiesSet(FlywayMigrationInitializer.java:70)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800)... 18 common frames omitted
Caused by: org.flywaydb.core.api.FlywayException: Found non-empty schema(s) `xxxx` without schema history table! Use baseline() or set baselineOnMigrate to true to initialize the schema history table.at org.flywaydb.core.Flyway$1.execute(Flyway.java:1371)at org.flywaydb.core.Flyway$1.execute(Flyway.java:1341)at org.flywaydb.core.Flyway.execute(Flyway.java:1696)at org.flywaydb.core.Flyway.migrate(Flyway.java:1341)... 25 common frames omitted

5.2 屏蔽方法

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration;@SpringBootApplication(exclude = {FlywayAutoConfiguration.class})
public class HzBaseApplication {public static void main(String[] args) {SpringApplication.run(HzBaseApplication.class, args);}}

6. 执行结果

6.1 日志

2022-12-16 11:20:34,800 INFO (DruidDataSource.java:998)- {dataSource-1} inited
2022-12-16 11:20:35,116 INFO (Slf4jLog.java:49)- Database: jdbc:mysql://106.14.11.239:3306/hz_base (MySQL 5.7)
2022-12-16 11:20:35,343 INFO (Slf4jLog.java:49)- Successfully validated 1 migration (execution time 00:00.105s)
2022-12-16 11:20:35,492 INFO (Slf4jLog.java:49)- Current version of schema `hz_base`: 1.0.0
2022-12-16 11:20:35,493 WARN (Slf4jLog.java:53)- outOfOrder mode is active. Migration of schema `hz_base` may not be reproducible.
2022-12-16 11:20:35,509 INFO (Slf4jLog.java:49)- Schema `xxxx` is up to date. No migration necessary.
2022-12-16 11:20:35,565 INFO (MainDataSourceMigration.java:56)- 初始化Sql成功

6.2 数据库验证

7. 扩展多数据源

多数据源通过buildConfiguration构建多个配置(数据源及script脚本),执行多次即可完成多数据源sql的初始化。

Springboot集成Flyway(适用于多数据源)相关推荐

  1. Flayway mysql自动生成版本_Flyway详解及Springboot集成Flyway的详细教程

    Flayway是一款数据库版本控制管理工具,,支持数据库版本自动升级,Migrations可以写成sql脚本,也可以写在java代码里:不仅支持Command Line和java api ,也支持Bu ...

  2. 【flyway】SpringBoot集成Flyway

    目录 Flaway是什么? SpringBoot集成Flyway --gradle项目 注意 Flaway是什么? Flyway是一款数据库迁移(migration)工具.简单点说,就是在你部署应用的 ...

  3. SpringBoot集成flyway、mybatis-plus(超详细)

    拿到一个新需求,要给一个开发中的项目集成flyway进行数据库版本控制,对于flyway没有什么了解,就得先搭建一个demo练习一下,先知道怎么用,再集成到老项目上: 一.新建SpringBoot项目 ...

  4. Flyway详解以及Springboot集成Flyway

    Flayway是一款数据库版本控制管理工具,,支持数据库版本自动升级,Migrations可以写成sql脚本,也可以写在java代码里:不仅支持Command Line和java api ,也支持Bu ...

  5. java flyway_Flyway详解以及Springboot集成Flyway(转)

    Flayway是一款数据库版本控制管理工具,,支持数据库版本自动升级,Migrations可以写成sql脚本,也可以写在java代码里:不仅支持Command Line和java api ,也支持Bu ...

  6. SpringBoot集成Mybatis动态多数据源后,MybatisPlus的IPage失效的问题解决方案

    背景 之前做数据抽取的时候,搭了一个mybatis动态数据源切换的架子.方便他们写抽取的代码.今天同事问我,架子里面的mybatisplus的IPage失效了是什么问题.想了一下,应该是写动态数据源的 ...

  7. springboot集成redis配置多数据源

    [前言]在开发需求中,很多情况一个数据源是不能够满足业务需求的,常常需要我们去配置多个数据源去综合使用完成业务需要的功能 其实多数据源本质就是多个redisTemplate [代码] 1.依赖(这里以 ...

  8. 使用springboot集成jseesite

    请访问 开源中国下的 https://git.oschina.net/wolfking/wolfking-jeesite https://www.oschina.net/p/wolfking-jees ...

  9. springboot集成beetlsql支持多数据源源码

    之前写过beetlsql的使用,有人留言要源码,本篇把springboot集成beetlsql的多数据源码列出.前文如下: springboot集成beetlsql以及支持多数据源_wuyang199 ...

最新文章

  1. APP启动原理,APPdelegate程序状态解析
  2. 【深度学习】模型训练教程之Focal Loss调参和Dice实现
  3. 定个目标|建立自己的技术知识体系
  4. spark之3:安装部署
  5. 数据结构中缀表达式转后缀表达式与后缀表达式的求值实训报告_动图+源码,演示 Java 中常用数据结构执行过程及原理...
  6. 《C语言及程序设计》程序填空——字符数组与字符串处理
  7. 习题6-2 使用函数求特殊a串数列和 (20 分)
  8. Coursera自动驾驶课程第15讲:GNSS and INS Sensing for Pose Estimation
  9. 使用OpenCore引导黑苹果
  10. 简单控制台项目:电影购票系统
  11. web测试抓包基本功——使用Google的F12
  12. Redhat克隆及其配置
  13. 好书推荐《月亮与六便士》
  14. 成年人改名字要哪些步骤和手续?
  15. 机器学习笔记:随机深度网络 stochastic depth
  16. 超爽的对战游戏3.0版本来了 非常有趣
  17. zbb20171223 vm12 Vmware虚拟机设置静态IP地址
  18. RHCE(逻辑卷LVM,NFS服务)
  19. Matlab/Simulink中PMSM模型的反电动势系数和转矩系数
  20. 【并行计算-CUDA开发】GPU 的硬体架构

热门文章

  1. [BUUCTF]REVERSE——[GWCTF 2019]pyre
  2. webgl-图形非矩阵旋转
  3. R语言:随机森林的实现——randomForest
  4. 业务上云后,云上运维势在必行
  5. Advice for Computer Science College Students(对计算级系大学生的建议)
  6. Wireshark Labs(3): DNS v7.0
  7. 【2022研电赛】商业赛华南区二等奖:Aurora:智能输液监测系统
  8. 1994年考研数学一真题pdf
  9. Oracle 先判断是否为空,然后对非空数据做计算(DECODE比较大小)
  10. 搭建流媒体推流/拉流服务(RTMP/RTSP/HLS/HTTP-FLV)