我试图在Spring-Boot WebFlux应用程序中创建一些WebFilter,我注意到我开发的所有后期操作仅适用于Actuator的端点,而不适用于我自己的端点。
在分析过程中,我注意到当我调用执行器端点(例如:运行状况)时,单声道已按预期完成。但是,当我调用端点时,单声道发出了取消信号。 这是预期的行为吗?
依赖项:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
</parent>
<groupId>test</groupId>
<artifactId>tests</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
我的代码:
@SpringBootApplication
@RestController
public class Main {
private static final Logger LOGGER = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
@Bean
public WebFilter newFilter() {
return (exchange, chain) -> chain.filter(exchange)
.doFinally(signalType -> {
LOGGER.info("Status: {}", signalType);
})
.doAfterSuccessOrError(((aVoid, throwable) -> {
LOGGER.info("Only actuators come to here.");
}));
}
@GetMapping("/hello")
public Mono<String> probe() {
return Mono.fromCallable(() -> "world");
}
}
curl http://localhost:8080/test
控制台: 状态:取消
curl http://localhost:8080/actuator/health
控制台: 仅执行器来到这里。 状态:onComplete
我希望所有端点调用都将执行doAfterSuccessOrError函数,但只有执行器的Health可以执行。
答案 0 :(得分:0)
这似乎是SpringBoot 2.1.5的错误,升级到2.1.7将解决此问题