springboot3 liquibase SQL执行失败自动回滚,及自动打tag
2023-12-13 03:39:46
一: 自动执行回滚, 已执行成功的忽略,新sql执行失败则执行新sql文件中的回滚sql
pom.xml?
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
<version>4.25.0</version>
</dependency>
sql 文件指定回滚sql
新建一个?CustomChangeExecListener 继承?AbstractChangeExecListener?
@Service
@Slf4j
public class CustomChangeExecListener extends AbstractChangeExecListener {
@SneakyThrows
public void runFailed(ChangeSet changeSet, DatabaseChangeLog databaseChangeLog, Database database, Exception exception) {
log.error("sql执行失败, 执行回滚sql, 错误原因: {}", exception.getMessage());
String line = "\r\n";
String jdbc = "jdbc";
List<String> sqlList = new ArrayList<>();
changeSet.getRollback().getChanges().stream().forEach(e->{
RawSQLChange rawSQLChange = (RawSQLChange) e;
Arrays.asList(rawSQLChange.getSql().split(line)).stream().forEach(sql->{
sqlList.add(sql);
});
});
if(CollectionUtils.isEmpty(sqlList)){
return;
}
Executor executor = Scope.getCurrentScope().getSingleton(ExecutorService.class).getExecutor(jdbc, database);
for (String sql : sqlList){
executor.execute(new RawSqlStatement(sql));
}
}
}
启动参数加上:
-Dliquibase.command.changeExecListenerClass=com.tang.execListener.CustomChangeExecListener
2??: 自动打tag, 注意如果有上面的自动执行回滚sql, 这一步不是很重要
spring.liquibase.tag 不起作用, 搞个自动打tag
1: github 拉取源码
2: idea 打开如下路径:
liquibase/sqlgenerator/core/MarkChangeSetRanGenerator.java?
加入如下代码:
if(change instanceof RawSQLChange){
tag = changeSet.getId();
}
?
把编译的class 替换jar路径中的class放到仓库
sql文件中加入标记如下: 作者:id
加入上面的代码,tag会拿这个id 作为tag标签。
执行结果:
文章来源:https://blog.csdn.net/tang_jian_dong/article/details/134891454
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!