我们应该在 Spring Boot 中将@Scheduled 与控制器方法(如@PostMaping)一起使用吗?

Should we use @Scheduled together with controller method (like @PostMaping) in SpringBoot?

我正在使用 SpringBatch 但我找不到任何关于 Spring 的 @Scheduled 的文档或教程,显示它与某些控制器方法一起使用(用 [ 注释=13=], @PostMapping).

比如我有这个控制器方法

    @Scheduled(cron = "0 */5 * ? * *")
    @PostMapping("/create-progress-data")
    public ResponseEntity<?> createSomething(@Request Something request) { }

我可以很容易地创建另一个方法来做与 createSomething 主体相同的事情,然后将它放在 @ComponentService 中,但在这样做和只是在控制器方法之上应用@Scheduled,我不知道哪个更好。

我可以看到:

Ps:我需要这样实现,因为我们需要支持两种方式来触发作业。通过 api 调用(控制器方法),或定期(使用 @Scheduled)。

请注意,在这种情况下,控制器方法的代码和预期的 cron 作业是相同的。

我认为最好将这两种启动工作的方式分开。您可以将控制器用于基于 API 的按需作业启动,并使用 @Scheduled 方式用于按定义的计划启动作业的后台进程。

也就是说,您应该考虑作业定义的并发策略。例如,如果作业启动请求来自 API 并尝试启动已按计划启动的相同作业(当时可能是 运行),您的系统应该怎么做?还有其他用例,但这取决于您的要求。