Как смоделировать автономное приложение Spring Boot - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть контроллер с конечной точкой. Я хотел бы отключить эту конечную точку во время выполнения, чтобы она выглядела как приложение для пользователя в автономном режиме.

В настоящее время это делается для отключения конечной точки:

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();

Это работает как чудо, бобы не зарегистрированы и зарегистрированы в во время выполнения. Однако, когда пользователь вызывает мое приложение, он получает 404 вместо тайм-аута соединения, что я и искал.

Я понимаю, почему я получаю 404. Запросы все еще входят в приложение, но путь не найден, потому что бины не зарегистрированы, поэтому он возвращает sa 404. Как мне go о решении «фактическая офлайн» ситуация, которая вообще ничего не возвращает.

1 Ответ

1 голос
/ 13 февраля 2020

Я не очень понимаю, какой может быть сценарий использования для такого сценария.

Хотя я могу придумать несколько подходов:

  1. Просто остановите приложение. Как уже было сказано в комментариях - клиент попытается подключиться и в конечном итоге столкнется с тайм-аутом подключения.

  2. Перезапустите контекст приложения «программно» без перезапуска всей JVM. Для этого есть учебник .

Второй подход может быть привлекательным только в сочетании со свойством spring.main.web-environment=false, которое вы должны предоставить при перезапуске контекста приложения. .

...