@Scheduled和Spring webflux

时间:2019-01-08 13:42:39

标签: spring-webflux

我正在寻找一种在反应式API中使用计划任务的方法。 我知道它使用线程池,因此与webflux组件不太兼容。 你有等同的工作要做吗?

非常感谢

Saveriu

4 个答案:

答案 0 :(得分:1)

有人对此有更新吗?这正是我们所担心的,最终我们使用了计划每10秒运行一次的aws-lambda。该lambda直接从我们的应用程序调用终结点。

答案 1 :(得分:1)

有几种方法可以做到。考虑到您想如何安排它,您也可以使用以下方法。

@Configuration
class ApplicationConfiguration() {

    @PostConstruct
    fun init() {

        Flux.interval(Duration.ofMinutes(12))
            .onBackpressureDrop()
            .flatMap { /* some task that return Mono<T> */ }
            .subscribeOn(Schedulers.boundedElastic())
            .subscribe()
    }
}

请注意,除非呼叫阻塞,否则不需要 subscribeOn(Schedulers.boundedElastic())。我也在使用 onBackpressureDrop,但您的要求可能与此不同。

答案 2 :(得分:0)

Webflux有它自己的调度程序,我猜这种方式应该这样做:

Disposable schedulePeriodically(Runnable task, long initialDelay, long period, TimeUnit unit);  

答案 3 :(得分:0)

您可以尝试在 #include <stdio.h> int int_len(int nb) { int len = 1; while (nb > 0){ len++; nb /= 10; } return len - 1; } void ft_combi(int n) { int combi = n / n; // add error if n = 0 for (int i = 0; i < n; i++) combi *= 10; for (int i = 0; i < combi; i++) { for (int j = 0; j > int_len(i) - n; j--) printf("0"); if (i == 0) printf("\n"); else printf("%d\n", i); } } int main() { ft_combi(2); } 方法中使用 Schedulers.immediate()

@Scheduled

因此,任务在提交它们的线程上运行。