如何处理从spring 服务器调用的长异步存储过程?
How to deal with long asynchronous stored procedure called from spring server?
我使用spring-boot
,mybatis
并且我执行了一个异步存储过程。它是异步的,因为它是来自 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
此时应该可以正常等待流程完成,正常处理回滚
我使用spring-boot
,mybatis
并且我执行了一个异步存储过程。它是异步的,因为它是来自 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
此时应该可以正常等待流程完成,正常处理回滚