liquibase执行的每一个changeSet都自动打tag

liquibase可以回滚,其中一中方式需要打tag,changeSet里面的其它标签和tag是互斥的,需要弄一个单独的changeSet来定义tag,看了liquibase实现里面有一个ChangeExecListener可以实现这个功能

<changeSet id="TAG#184711-tb_user-20241128-001" author="pengzhikang">
    <tagDatabase tag="TAG#184711-tb_user-20241128-001"/>
</changeSet>

参考liquibase多数据源数据库版本控制

1、引入依赖

<dependency>
    <groupId>org.thghh.dynamic.liquibase</groupId>
    <artifactId>dynamic-liquibase-spring-boot-starter</artifactId>
    <version>4.30.0-1</version>
</dependency>

2、代码实现

import liquibase.change.core.TagDatabaseChange;
import liquibase.changelog.ChangeSet;
import liquibase.changelog.DatabaseChangeLog;
import liquibase.changelog.visitor.AbstractChangeExecListener;
import liquibase.database.Database;
import org.springframework.stereotype.Component;

/**
 * 每一个更改集自动添加tag
 *
 * @author pengzhikang
 * @date 2024/12/3 19:50
 * @since 1.0.0
 */
@Component
public class AutoTagChangeExecListener extends AbstractChangeExecListener {

    /** 标签前缀 */
    public static final String TAG_PREFIX = "TAG-";

    @Override
    public void willRun(ChangeSet changeSet, DatabaseChangeLog databaseChangeLog, Database database, ChangeSet.RunStatus runStatus) {
        if (changeSet != null && changeSet.getChanges().stream().noneMatch(TagDatabaseChange.class::isInstance)) {
            TagDatabaseChange tagDatabaseChange = new TagDatabaseChange();
            tagDatabaseChange.setTag(TAG_PREFIX + changeSet.getId());
            changeSet.addChange(tagDatabaseChange);
        }
    }

}
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐