java—如何模拟离线spring引导应用程序

tzdcorbm  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(338)

我有一个端点控制器。我想在运行时禁用此终结点,以便用户看起来应用程序处于脱机状态。
当前正在执行此操作以禁用终结点:

private static final Map<RequestMappingInfo, HandlerMethod> requestMappings = new HashMap<>();

this.context.getHandlerMethods().forEach((k, v) -> {
    if (k.getPatternsCondition().getPatterns().contains("/customer")) {
      requestMappings.put(k, v);
    }
});
requestMappings.forEach((k, v) -> this.context.unregisterMapping(k));

为了实现:

requestMappings.forEach((k, v) -> this.context.registerMapping(k, v.getBean(), v.getMethod()));
requestMappings.clear();

这就像一个符咒,bean在运行时被取消注册和注册。然而,当用户调用我的应用程序时,他们得到的是404,而不是连接超时,这正是我要找的。
我明白为什么我会得到404。请求仍然会进入应用程序,但是找不到路径,因为bean没有注册,所以它返回404。我该如何着手解决一个“实际离线”的情况下,没有返回任何东西。

pwuypxnk

pwuypxnk1#

我真的不明白这种场景的用例是什么。
不过,我可以想到一些方法:
停止应用程序。正如在注解中已经说明的那样-客户端将尝试连接,并且最终将进入连接超时。
“以编程方式”重新启动应用程序上下文,而不重新启动整个jvm。有一个关于这样做的教程。
第二种方法只能与房地产结合使用 spring.main.web-environment=false 在应用程序上下文重新启动期间应该提供的。

相关问题