Иногда я получаю печально известную CJCommunicationsException
после получения пары сообщений RabbitMQ с момента запуска моего проекта.Поскольку я практически не контролирую сервер MySQL, мне нужно выйти / перезапустить мое приложение Spring Boot, чтобы избавиться от исключения.
Поскольку контекст не включает @Controller
или @RestController
(Я использую слушатель RabbitMQ), я не могу поймать исключение с @ControllerAdvice
и @ExceptionHandler
.Я пытаюсь сделать что-то вроде:
public static void main(String... args) throws Exception {
while(true){
try(ConfigurableApplicationContext ctx = SpringApplication.run(Application.class, args)) {
CompletableFuture<Throwable> throwableFuture = new CompletableFuture<>();
Thread.setDefaultUncaughtExceptionHandler(
(thread, throwable) -> throwableFuture.completeExceptionally(throwable));
throwableFuture.get();
} catch (Exception | VirtualMachineError t) {
//log error
}
}
}
, как указано здесь , но поскольку исключение перехватывается встроенным Tomcat в org.apache.catalina.core.StandardWrapperValve.invoke
, это не помогает, так как этот ответ указывает.
Как мне преодолеть это?