如何处理从spring 服务器调用的长异步存储过程?

How to deal with long asynchronous stored procedure called from spring server?

我使用spring-bootmybatis并且我执行了一个异步存储过程。它是异步的,因为它是来自 SSIS 程序包(目录模式)的过程 - 默认情况下这些过程是异步的。

问题是在执行存储过程之前,我修改了数据库中的一些值。由于它是异步的,注释 @Transactional 对我没有帮助。

我担心的是执行此包(SSIS 目录 - start_execution)失败。在这种情况下,我应该恢复数据库中以前的值(一个值,但在这里无关紧要)。 但是,@Transactional 帮不了我,因为如您所知,spring 认为程序已成功完成并接受交易。

如何处理这个问题 - 我的意思是在 ssis 包执行失败的情况下回滚?

根据 this post,您可以 运行 使用正确的参数同步 SSIS prodecure:

[...] 您必须确保将“SYNCHRONIZED”参数添加到程序包执行中。在 start_execution 过程之前:

exec [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, @object_type=50, @parameter_name=N'SYNCHRONIZED', @parameter_value=1

此时应该可以正常等待流程完成,正常处理回滚