Browse Source
Extract `SpringApplicationRunListeners` class from `SpringApplication` to simplify the `run` method. Closes gh-3079pull/3077/merge
2 changed files with 159 additions and 81 deletions
@ -0,0 +1,95 @@
@@ -0,0 +1,95 @@
|
||||
/* |
||||
* Copyright 2012-2015 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.Collection; |
||||
import java.util.List; |
||||
|
||||
import org.apache.commons.logging.Log; |
||||
import org.springframework.context.ConfigurableApplicationContext; |
||||
import org.springframework.core.env.ConfigurableEnvironment; |
||||
import org.springframework.util.ReflectionUtils; |
||||
|
||||
/** |
||||
* A collection of {@link SpringApplicationRunListener}. |
||||
* |
||||
* @author Phillip Webb |
||||
*/ |
||||
class SpringApplicationRunListeners { |
||||
|
||||
private final Log log; |
||||
|
||||
private final List<SpringApplicationRunListener> listeners; |
||||
|
||||
public SpringApplicationRunListeners(Log log, |
||||
Collection<? extends SpringApplicationRunListener> listeners) { |
||||
this.log = log; |
||||
this.listeners = new ArrayList<SpringApplicationRunListener>(listeners); |
||||
} |
||||
|
||||
public void started() { |
||||
for (SpringApplicationRunListener listener : this.listeners) { |
||||
listener.started(); |
||||
} |
||||
} |
||||
|
||||
public void environmentPrepared(ConfigurableEnvironment environment) { |
||||
for (SpringApplicationRunListener listener : this.listeners) { |
||||
listener.environmentPrepared(environment); |
||||
} |
||||
} |
||||
|
||||
public void contextPrepared(ConfigurableApplicationContext context) { |
||||
for (SpringApplicationRunListener listener : this.listeners) { |
||||
listener.contextPrepared(context); |
||||
} |
||||
} |
||||
|
||||
public void contextLoaded(ConfigurableApplicationContext context) { |
||||
for (SpringApplicationRunListener listener : this.listeners) { |
||||
listener.contextLoaded(context); |
||||
} |
||||
} |
||||
|
||||
public void finished(ConfigurableApplicationContext context, Throwable exception) { |
||||
for (SpringApplicationRunListener listener : this.listeners) { |
||||
callFinishedListener(listener, context, exception); |
||||
} |
||||
} |
||||
|
||||
private void callFinishedListener(SpringApplicationRunListener listener, |
||||
ConfigurableApplicationContext context, Throwable exception) { |
||||
try { |
||||
listener.finished(context, exception); |
||||
} |
||||
catch (Throwable ex) { |
||||
if (exception == null) { |
||||
ReflectionUtils.rethrowRuntimeException(ex); |
||||
} |
||||
if (this.log.isDebugEnabled()) { |
||||
this.log.error("Error handling failed", ex); |
||||
} |
||||
else { |
||||
String message = ex.getMessage(); |
||||
message = (message == null ? "no error message" : message); |
||||
this.log.warn("Error handling failed (" + message + ")"); |
||||
} |
||||
} |
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue