我正在玩弄 Project Reactor 和反应式 MongoDB 存储库。我有以下代码:
@Builder
@FieldDefaults(level = AccessLevel.PRIVATE)
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Document
public class Person {
@Id
Integer id;
String name;
}
public interface ReactivePersonRepository extends ReactiveCrudRepository<Person, Integer> {
}
和主要@SpringBootApplication课程:
@SpringBootApplication
@EnableReactiveMongoRepositories
@RequiredArgsConstructor
public class ReactiveDatabaseApplication {
private final ReactivePersonRepository reactivePersonRepository;
public static void main(String[] args) {
SpringApplication.run(ReactiveDatabaseApplication.class, args);
}
@PostConstruct
public void postConstruct() {
Scheduler single = Schedulers.newSingle("single-scheduler");
IntStream.range(0, 10).forEach(i ->
Flux.just(Person.builder()
.id(i)
.name("PersonName")
.build())
.flatMap(personToSave -> {
System.out.println(String.format(
"Saving person from thread %s", Thread.currentThread().getName()));
return reactivePersonRepository.save(personToSave);
})
})
}
}
方法Flux::subscribeOn描述说:
因此,将此运算符放置在链中的任何位置也会影响执行 * onNext/onError/onComplete 信号的上下文,从链的开头到 * 下一次出现 {@link publishOn(Scheduler) publishOn}
这让我有点困惑,因为当我在处理链中没有任何publishOn指定时,线程名称的打印值是:
从线程 single-scheduler-1 中拯救人员 - 正如预期的那样
我不明白为什么。方法中指定的调度程序不应该subscribeOn用于每次flatMap执行吗?
当我取消注释publishOn行时,一切都由给定的单个调度程序执行,这是预期的。
谁能解释为什么操作不使用单个调度程序flatMap,而没有publishOn?
慕的地8271018
相关分类