Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 发布自定义事件并在基于SpringMVC的Rest应用程序中异步处理它_Java_Spring_Multithreading_Spring Mvc_Concurrency - Fatal编程技术网

Java 发布自定义事件并在基于SpringMVC的Rest应用程序中异步处理它

Java 发布自定义事件并在基于SpringMVC的Rest应用程序中异步处理它,java,spring,multithreading,spring-mvc,concurrency,Java,Spring,Multithreading,Spring Mvc,Concurrency,我已经基于SpringMVC编写了一个Rest应用程序,其中我需要做一些验证,一些验证是硬规则,一些是软规则。如果软规则失败,则生成警告;如果硬规则失败,则生成错误。 首先,如果有任何硬规则失败,我将检查硬规则,然后,仅在那时,我将返回响应,但让流程继续处理后续的软规则 在此,我想知道如何在Spring中创建两个并行线程来实现这一点? 或者,如何发布自定义事件并在另一个线程中异步处理它,然后让原始线程在Spring中继续工作 我知道@async和SpringTaskExecutor,但在这里如何

我已经基于SpringMVC编写了一个Rest应用程序,其中我需要做一些验证,一些验证是硬规则,一些是软规则。如果软规则失败,则生成警告;如果硬规则失败,则生成错误。 首先,如果有任何硬规则失败,我将检查硬规则,然后,仅在那时,我将返回响应,但让流程继续处理后续的软规则

在此,我想知道如何在Spring中创建两个并行线程来实现这一点? 或者,如何发布自定义事件并在另一个线程中异步处理它,然后让原始线程在Spring中继续工作

我知道@async和SpringTaskExecutor,但在这里如何最好地使用它们


我正在寻求设计和体系结构的指导方针和想法,以尽可能最好的方式处理此任务。

如前所述,软规则验证失败只会生成警告,它可以在单独的后台过程中处理。这样,主线程可以只关注硬规则,而不必担心软规则

对于上述行为,需要执行以下几点

对于每个请求,持久化相关数据,用于软规则处理,标记processed=false,最好是插入和处理的时间戳。 在持久化数据之后,让主线程继续执行硬规则处理。 引入计划服务,通过该服务定期获取未处理的数据,并将其标记为已处理=真正的软规则处理后以及相关的已处理时间戳。这将作为后台进程,定期轮询数据以查找未处理的规则 确保各交易即:。软规则数据插入和处理被很好地隔离。此外,在进行规则处理时,对于系统故障,错误处理应该是健壮的


如果需要更多信息,请在评论中告知。

请详细说明!!我的意思是我应该使用什么构造,或者更确切地说,我应该使用Async来分叉新线程,在中启动后台进程的首选方式是什么Spring@JohnDoe不需要@Async或forking新线程,因为主线程将只验证硬规则,而软规则验证将由后台进程完成。也如后期使用@Scheduled for background进程中所述。有关示例,请参见和。