【问题标题】:Start liquibase after activiti under Spring Boot 2Spring Boot 2下activiti后启动liquibase
【发布时间】:2020-06-07 21:51:00
【问题描述】:

我们有一个包含 activiti 和 liquibase 依赖项的项目。 Activiti 是自动配置的(exc. 'spring.activiti.async-executor-activate' 和 application.yml 中的 'spring.activiti.database-schema-update' 参数)和 liquibase 也是(exc. 'spring.liquibase.change-log ')。

现在我们需要使用特殊的 liquibase 变更集(例如 <sql>alter index ... rebuild tablespace ...</sql>)重建 activiti 表 (ACT_*) 上的索引。

现有数据库没有问题,但由于 liquibase 正在尝试更改不存在的 ACT_* 索引,因此它在第一个应用程序启动数据库安装时崩溃。

考虑到 Spring Boot 自动配置,我如何在安装 activiti DB 后启动 liquibase?

【问题讨论】:

    标签: java spring-boot liquibase activiti spring-autoconfiguration


    【解决方案1】:

    您可以使用preconditions 控制这些变更集的执行。例如:

    <changeSet id="1"  author="bob">  
        <preConditions onFail="MARK_RAN">  
            <indexExists>your_act_index</indexExists>  
        </preConditions>  
        <sql>alter index ... rebuild tablespace ...</sql>
    </changeSet>  
    

    只有在索引存在时才会重建索引,而空数据库则不然。

    【讨论】:

    • 感谢您的回复,但这种方式根本不会重建索引:首先应用程序启动前提条件将起作用,在后续启动时,此脚本将已经在 DATABASECHANGELOG 表中,因此不会启动。我错了吗?
    • 你是对的,如果你说onFail=MARK_RAN 它将永远不会再次运行,但你真的想在一个全新的数据库上运行索引重建吗?如果你这样做了,你可能会说onFail=CONTINUE,所以它会尝试在下一次启动时执行它。
    猜你喜欢
    • 1970-01-01
    • 2016-10-09
    • 2021-04-13
    • 2022-11-11
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    • 2018-09-07
    • 2018-11-20
    相关资源
    最近更新 更多