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

时间:2017-03-11 23:59:41

标签: java multithreading spring-boot transactions mybatis

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

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

我担心的是执行此软件包失败(SSIS目录 - start_execution)。在这种情况下,我应该恢复数据库中的先前值(一个值,但这并不重要)。 但是,@Transactional无法帮助我,因为您知道spring认为该过程已成功完成且接受该事务。

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

1 个答案:

答案 0 :(得分:1)

根据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

此时,您应该能够像往常一样等待完成该过程并正常处理回滚。