使用cron在Spring中安排周期性反应任务?

Joh*_*han 4 cron spring spring-boot project-reactor spring-webflux

通常我会做这样的事情来安排一个作业在 Spring 中定期执行,并在给定的时区使用 cron:

@Scheduled(cron = "0 0 10 * * *", zone = "Europe/Stockholm")
public void scheduleStuff() {
    // Do stuff
}
Run Code Online (Sandbox Code Playgroud)

这将阻止线程调用,scheduleStuff直到作业完成。然而,在这种情况下,“东西”我想要做的是所有使用弹簧无阻塞的构建块实现项目反应器(即MonoFlux等)。

例如,假设我想定期触发此功能:

Flux<Void> stuff() {
    return ..
}
Run Code Online (Sandbox Code Playgroud)

我当然可以简单地调用stuff().subscribe()(甚至stuff().block()),但这会阻塞线程。有没有更好的方法来实现与@Scheduled(cron = "0 0 10 * * *", zone = "Europe/Stockholm")非阻塞代码相同的东西?

我正在使用 Spring Boot 2.1。

Ale*_*kin 5

实际上,subscribe()不会阻塞您的线程。stuff().subscribeOn(Schedulers.parallel()).subscribe()如果您确实需要,您可以调用或其他调度程序来确保执行将在单独的线程中完成。