有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java RxJava Observable在SpringBoot项目中运行

我有一段代码,它使用RxJava中的Observable,RxJava正在观察C驱动器中的变化

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

代码打印例如新文件夹

现在我想让它在Spring Boot应用程序运行时一直运行。 现在,当我在@Test method中运行它时,它就可以工作了。 我知道我可以通过JavaSE或调度来实现,但我想这样做


共 (1) 个答案

  1. # 1 楼答案

    toBlocking操作符用于阻止观察者,直到所有项目都被发出,但在您的示例中,您订阅的项目可能已经在等待所有项目被发出

    您仍然可以使用这种方式,但由于您使用的是执行管道异步的interval,您可能希望在主线程中获得结果,因此可以使用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