Polish multiple root contexts in Restarter

See gh-7335
See gh-7336
This commit is contained in:
Phillip Webb
2016-11-16 15:17:23 -08:00
parent 34fb909b41
commit dfd327d68f
2 changed files with 15 additions and 11 deletions

View File

@@ -45,15 +45,14 @@ public class RestartApplicationListener
onApplicationStartingEvent((ApplicationStartingEvent) event);
}
if (event instanceof ApplicationPreparedEvent) {
Restarter.getInstance()
.prepare(((ApplicationPreparedEvent) event).getApplicationContext());
onApplicationPreparedEvent((ApplicationPreparedEvent) event);
}
if (event instanceof ApplicationReadyEvent
|| event instanceof ApplicationFailedEvent) {
Restarter.getInstance().finish();
if (event instanceof ApplicationFailedEvent) {
Restarter.getInstance().remove(((ApplicationFailedEvent) event).getApplicationContext());
}
}
if (event instanceof ApplicationFailedEvent) {
onApplicationFailedEvent((ApplicationFailedEvent) event);
}
}
@@ -72,6 +71,14 @@ public class RestartApplicationListener
}
}
private void onApplicationPreparedEvent(ApplicationPreparedEvent event) {
Restarter.getInstance().prepare(event.getApplicationContext());
}
private void onApplicationFailedEvent(ApplicationFailedEvent event) {
Restarter.getInstance().remove(event.getApplicationContext());
}
@Override
public int getOrder() {
return this.order;

View File

@@ -52,7 +52,6 @@ import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.ResolvableType;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ReflectionUtils;
/**
@@ -316,11 +315,9 @@ public class Restarter {
this.logger.debug("Stopping application");
this.stopLock.lock();
try {
if (!CollectionUtils.isEmpty(this.rootContexts)) {
for (ConfigurableApplicationContext rootContext : this.rootContexts) {
rootContext.close();
}
this.rootContexts.clear();
for (ConfigurableApplicationContext context : this.rootContexts) {
context.close();
this.rootContexts.remove(context);
}
cleanupCaches();
if (this.forceReferenceCleanup) {