Мы используем Reactive Spring Data Repository с Spring WebFlux. Мое понимание для SubscribeOn говорит, что он решает, какой ThreadPool будет выполнять операторы до того, как SubscribeOn будет выполняться в потоке, а PublishOn решает фактический ThreadPool, для которого будет выполняться подписка. Однако в приведенном ниже коде, даже с PublishOn и SubscribeOn, код не выполняется в основном потоке, скорее он возвращается к Cluster-nio-worker-1.
System.out.println("Current Thread :- "+Thread.currentThread().getName()); //Current Thread :- main
personRepository.findAll().log()
.map(document -> mapDocumentToSomethingElse(document)) //Current thread cluster-nio-worker-1
.subscribeOn(Schedulers.immediate())
.publishOn(Schedulers.immediate())
.subscribe(trackingevent -> System.out.println("Got Item "+item +" inside thread "+Thread.currentThread()), //Thread[cluster-nio-worker-1,5,main]
excp -> excp.printStackTrace(),
() -> System.out.println("Completed processing Thread:- "+Thread.currentThread().getName())); //cluster-nio-worker-1
Также, что делает Thread [cluster- nio-worker-1,5, main] значит? Почему эти вызовы методов не используют основной поток для выполнения.