我有下面的代码,没有一个日志记录器被打印出来。
- 我尝试没有Schedulers.boundedElastic(),然后它工作得很好。
- 我也尝试了Schedulers.boundedElastic()和Thread。睡在订阅外面,然后它工作。
不工作:
class Foo1 {
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(Foo1.class);
@Test
public void test1() throws InterruptedException {
Mono.just("Input Data").flatMap(msg -> {
try {
logger.info("Message input in logger");
// Some functionality
return Mono.just("Message processed");
} catch (Exception e) {
logger.error(e.toString());
return Mono.just("Message not processed");
}
}).doOnNext(res -> logger.info(res)).subscribeOn(Schedulers.boundedElastic())
.subscribe(c -> logger.info("subscribe completed"));
}
}
class Foo1 {
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(Foo1.class);
@Test
public void test1() throws InterruptedException {
Mono.just("Input Data").flatMap(msg -> {
try {
logger.info("Message input in logger");
// Some functionality
return Mono.just("Message processed");
} catch (Exception e) {
logger.error(e.toString());
return Mono.just("Message not processed");
}
}).subscribe(c -> logger.info("subscribe completed"));
}
}
我想异步执行逻辑,但是应该打印日志。
如何在不丢失异步功能和不使用线程的情况下实现这一点。显式地睡觉?
使用block
,不使用subscribe
,也可以订阅.doFinally(sig -> latch.countDown())
。