数据库版本控制中间件flyway企业落地

简介: flyway为数据库控制插件,使所有的数据库脚本都在ide(idea,eclipse等)中控制,这样能做到版本有迹可循。


image.png

flyway为数据库控制插件,使所有的数据库脚本都在ide(idea,eclipse等)中控制,这样能做到版本有迹可循。

这里需要注意如果使用flyway 就要禁止在数据库管理软件中更改数据库表结构

一.springboot整合flyway

1.pom.xml

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

2.application.yml

spring:
 flyway: # flyway 数据库 DDL 版本控制
    enabled: true # 正式环境才开启
    clean-disabled: true # 禁用数据库清理
    encoding: UTF-8
    locations: classpath:/db #脚本存放地址
    table: flyway_schema_history_systemportal #flyway记录表,记录了当前执行到了那个脚本
    baseline-version: 1 # 基线版本默认开始序号 默认为 1
    baseline-on-migrate: true #  针对非空数据库是否默认调用基线版本,为空的话默认会调用基线版本
    placeholder-replacement: false
    placeholders: # 定义 afterMigrateError.sql 要清理的元数据表表名
      flyway-table: ${spring.flyway.table}

在第一次初始化时有可能出现以下错误,需要加上 placeholder-replacement: false。

image.png

3.脚本结构

image.png

在定义初始化脚本时,版本号建议为V+(编号)+__(为双下划线)+业务名称+init,例如楼主的 V1__systemportal_init.sql。

在定义变更版本时,版本号为 V+(编号)+__(为双下划线)+操作+表名称,例如楼主的为V2__update_table.sql。

其中V1__systemportal_init.sql(初始化脚本)为项目所有的表结构与数据 以下方式导出。

image.png

 

V2__update_table.sql为变更版本(表结构变化的脚本,如果没有变更,只存在init脚本即可)其中内容如下 。

ALTER TABLE "systemportal"."task_plan"
  ALTER COLUMN "update_user" TYPE varchar(255) USING "update_user"::varchar(255);

执行以上操作后,将原数据库表数据全部删除(记得做好备份) 然后启动项目,即可在数据库中生成表,说白了,就是按照db中的脚本依次执行一遍。

二.原理

当使用flyway时,会生成一个记录表,记录当前已经执行的脚本名称。(script字段就是已经执行了的db中的脚本)

根据上文,在初始化时会产生以下记录。

image.png

如果再次启动时,会查询该表是否有大于V2版本的脚本,如果有执行这些脚本 如果没有什么也不执行。

三.整合quartz

当整合quartz时,需要查询表,但是因为使用了flyway此时并没有表结构,所以需要处理。

1.注释掉@PostConstruct中内容

image.png

2.添加配置

添加以下配置(在启动后执行)

@Component
public class RuntimeConfig implements ApplicationListener<ContextRefreshedEvent> {
    @Autowired
    private Scheduler scheduler;
    @Autowired
    private QrtzJobDao qrtzJobDao;
    @Override
    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
        this.initJob();
    }
    public void initJob() {
        QrtzJobVO qrtzJobVO = new QrtzJobVO();
        List<QrtzJobVO> scheduleJobList = qrtzJobDao.queryQrtzJobAll(qrtzJobVO);
        scheduleJobList.forEach(scheduleJob -> {
            CronTrigger cronTrigger = ScheduleUtils.getCronTrigger(this.scheduler, scheduleJob.getJobId());
            if (cronTrigger == null) {
                ScheduleUtils.createScheduleJob(this.scheduler, scheduleJob);
            } else {
                ScheduleUtils.updateScheduleJob(this.scheduler, scheduleJob);
            }
        });
    }
}


相关文章
|
12月前
|
关系型数据库 分布式数据库 数据库
一库多能:阿里云PolarDB三大引擎、四种输出形态,覆盖企业数据库全场景
PolarDB是阿里云自研的新一代云原生数据库,提供极致弹性、高性能和海量存储。它包含三个版本:PolarDB-M(兼容MySQL)、PolarDB-PG(兼容PostgreSQL及Oracle语法)和PolarDB-X(分布式数据库)。支持公有云、专有云、DBStack及轻量版等多种形态,满足不同场景需求。2021年,PolarDB-PG与PolarDB-X开源,内核与商业版一致,推动国产数据库生态发展,同时兼容主流国产操作系统与芯片,获得权威安全认证。
|
10月前
|
人工智能 安全 机器人
无代码革命:10分钟打造企业专属数据库查询AI机器人
随着数字化转型加速,企业对高效智能交互解决方案的需求日益增长。阿里云AppFlow推出的AI助手产品,借助创新网页集成技术,助力企业打造专业数据库查询助手。本文详细介绍通过三步流程将AI助手转化为数据库交互工具的核心优势与操作指南,包括全场景适配、智能渲染引擎及零代码配置等三大技术突破。同时提供Web集成与企业微信集成方案,帮助企业实现便捷部署与安全管理,提升内外部用户体验。
897 12
无代码革命:10分钟打造企业专属数据库查询AI机器人
|
7月前
|
SQL 人工智能 Linux
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
617 5
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
|
11月前
|
SQL 人工智能 数据库
SQL Server 2025 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 - 从本地到云端的 AI 就绪企业数据库
834 0
SQL Server 2025 - 从本地到云端的 AI 就绪企业数据库
|
10月前
|
人工智能 运维 数据挖掘
瑶池数据库开放日:全新发布Data+AI能力家族,赋能企业全栈智能实践
近日,阿里云瑶池数据库生态工具产品重磅升级,推出“Data+AI能力家族”,并举办了为期3天的全栈智能实践开放日活动。发布会上首次公开了 “Data Agent for Analytics、Data Agent for Meta、DAS Agent”等瑶池数据库Data Agent系列能力,以工具智能化 × 智能化工具的双引擎重构数据与AI的协同边界,揭秘AI时代数据价值释放的全新路径。
|
12月前
|
SQL 运维 监控
数据库国产化选型?YashanDB 给中大型企业的五个答案
近两年,“国产数据库”成为企业数字化升级的重要议题。YashanDB作为新一代国产关系型数据库,以完整产品矩阵解决企业核心关切:通过图形化工具提升开发效率;提供自动化迁移平台简化数据库切换;云管理工具减轻运维负担;支持复杂业务场景;拥有成熟团队保障企业级服务。YashanDB不仅是“可替代”,更是“更可靠”的选择,助力企业实现高效、可控的数据库升级。
|
12月前
|
存储 SQL 运维
当「内容科技企业」遇上多模数据库:新榜采用Lindorm打造全域数据“超级底盘”
新榜业务以数据服务提升内容产业信息流通效率,其数据处理需求聚焦于跨平台实时数据融合处理、实时分析检索、批量更新效率三大维度。Lindorm通过多模超融合架构,提供检索分析一体化、多引擎数据共享,分布式弹性扩展等能力,成为支撑新榜内容服务的核心引擎,助力客户在内容生态竞争中持续领跑。
|
中间件 关系型数据库 数据库
docker快速部署OS web中间件 数据库 编程应用
通过Docker,可以轻松地部署操作系统、Web中间件、数据库和编程应用。本文详细介绍了使用Docker部署这些组件的基本步骤和命令,展示了如何通过Docker Compose编排多容器应用。希望本文能帮助开发者更高效地使用Docker进行应用部署和管理。
394 19