通常我会做这样的事情来安排一个作业在给定的时区中使用 cron 在 Spring 中定期执行:
@Scheduled(cron = "0 0 10 * * *", zone = "Europe/Stockholm")
public void scheduleStuff() {
// Do stuff
}
这将阻塞调用
scheduleStuff
的线程直到作业完成。但是在这种情况下,我想做的“东西”都是使用 Springs 的 project reactor 的非阻塞构建 block 来实现的。 (即 Mono
、Flux
等)。例如。假设我想定期触发此功能:
Flux<Void> stuff() {
return ..
}
我当然可以直接调用
stuff().subscribe()
(甚至 stuff().block()
)但这会阻塞线程。有没有更好的方法来实现与 @Scheduled(cron = "0 0 10 * * *", zone = "Europe/Stockholm")
相同的目标?对于非阻塞代码?我正在使用 Spring Boot 2.1。
最佳答案
实际上,subscribe()
不会阻塞你的线程。您可以调用stuff().subscribeOn(Schedulers.parallel()).subscribe()
或其他调度程序,以确保执行将在单独的线程中完成,如果你真的需要它。
关于spring - 使用cron在Spring中安排周期性的 react 任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53835800/