mirror of
https://github.com/spring-projects/spring-boot.git
synced 2024-09-03 04:26:12 +08:00
Allow restart to be enabled when CL not named AppClassLoader
Previously, the restart initializer that enables restart when -Dspring.devtools.restart.enabled=true is set had no effect when the ClassLoader's name did not contain AppClassLoader. This commit updates RestartApplicationListener to use the correct RestartInitializer when the system property has forcibly enabled restart. When restart is enabled a SilentExitException is thrown and it should be caught and handled by the SilentExitExceptionHandler. When the application is invoked via one of the loader's LauncherClasses reflection is used and this exception becomes wrapped in an InvocationTargetEception. Previously, this wrapping prevented SilentExitExceptionHandler from handling the exception. This commit updates the handler to look for an InvocationTargetException with a SilentExitException target in addition to continuing to look for a SilentExitException directly. Fixes gh-24797
This commit is contained in:
parent
26f143b8d3
commit
a95a7e3d40
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2012-2020 the original author or authors.
|
* Copyright 2012-2021 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@ -83,12 +83,11 @@ public class RestartApplicationListener implements ApplicationListener<Applicati
|
|||||||
}
|
}
|
||||||
if (restartInitializer != null) {
|
if (restartInitializer != null) {
|
||||||
String[] args = event.getArgs();
|
String[] args = event.getArgs();
|
||||||
DefaultRestartInitializer initializer = new DefaultRestartInitializer();
|
|
||||||
boolean restartOnInitialize = !AgentReloader.isActive();
|
boolean restartOnInitialize = !AgentReloader.isActive();
|
||||||
if (!restartOnInitialize) {
|
if (!restartOnInitialize) {
|
||||||
logger.info("Restart disabled due to an agent-based reloader being active");
|
logger.info("Restart disabled due to an agent-based reloader being active");
|
||||||
}
|
}
|
||||||
Restarter.initialize(args, false, initializer, restartOnInitialize);
|
Restarter.initialize(args, false, restartInitializer, restartOnInitialize);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
logger.info(LogMessage.format("Restart disabled due to System property '%s' being set to false",
|
logger.info(LogMessage.format("Restart disabled due to System property '%s' being set to false",
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2012-2019 the original author or authors.
|
* Copyright 2012-2021 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@ -17,6 +17,7 @@
|
|||||||
package org.springframework.boot.devtools.restart;
|
package org.springframework.boot.devtools.restart;
|
||||||
|
|
||||||
import java.lang.Thread.UncaughtExceptionHandler;
|
import java.lang.Thread.UncaughtExceptionHandler;
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -35,7 +36,8 @@ class SilentExitExceptionHandler implements UncaughtExceptionHandler {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void uncaughtException(Thread thread, Throwable exception) {
|
public void uncaughtException(Thread thread, Throwable exception) {
|
||||||
if (exception instanceof SilentExitException) {
|
if (exception instanceof SilentExitException || (exception instanceof InvocationTargetException
|
||||||
|
&& ((InvocationTargetException) exception).getTargetException() instanceof SilentExitException)) {
|
||||||
if (isJvmExiting(thread)) {
|
if (isJvmExiting(thread)) {
|
||||||
preventNonZeroExitCode();
|
preventNonZeroExitCode();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user