Spring对所有@Scheduled
任务使用相同的执行器。默认情况下,它有1个线程,但您可以创建一个包含更多线程的自定义线程。
情况:我有两种类型的工作要安排:
- 长时间运行的后台作业:不一定需要准时启动,不希望它们同时运行,也绝对不希望每个作业同时运行一个以上(解决方案:使用有限线程池的固定延迟(
- 需要按计划运行的频繁、短时间运行的作业。(解决方案:与
@Async
一起使用固定速率(
问题:有限池上的慢速作业直接反对使用@Async
运行其他作业理想情况下,我会有两个独立的执行人,我可以指派他们做一些类似的事情
@Scheduled(delayedRate=600000, executor="longRunningExecutor")
和@Scheduled(fixedRate=5000, executor="rightNowExecutor")
但我找不到任何支持这样的东西。
如何确保长时间运行的作业不会占用线程池并阻塞当前的作业?
答案似乎是"他们正在努力"https://github.com/spring-projects/spring-framework/issues/20818