RxJava Observable在SpringBoot项目中运行

时间:2016-10-25 07:15:55

标签: java spring-boot rx-java

我的代码是使用来自RxJava的Observable,它正在观察C盘的变化,

File file = new File("C:\\");
        Observable
                .interval(1, TimeUnit.SECONDS)
                .concatMapIterable(x -> files(file))
                .distinct()
                .toBlocking()
                .subscribe(System.out::println);

代码打印例如新文件夹。

现在我想让它在Spring-Boot应用程序运行时一直运行。 现在,当我在@Test方法中运行它时,它可以工作。 我知道我可以通过JavaSE或Scheduling来做到这一点,但我想这样做。

1 个答案:

答案 0 :(得分:1)

toBlocking运算符用于阻止观察者直到发出所有项目,但在您的示例中您正在订阅,因此您可能已经在等待发出所有项目。

您仍然可以使用这种方式,但由于您使用执行管道异步的间隔,您可能希望在主线程中获得结果,因此您可以使用observerOn运算符

Scheduler scheduler;//Main thread

Observable
                .interval(1, TimeUnit.SECONDS)
                .concatMapIterable(x -> files(file))
                .distinct()
                .observerOn(scheduler)
                .subscribe(System.out::println);

您可以在此处查看一些异步示例https://github.com/politrons/reactive/blob/master/src/test/java/rx/observables/scheduler/ObservableAsynchronous.java