Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
S
spring-boot
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
DEMO
spring-boot
Commits
089233e4
Commit
089233e4
authored
Nov 04, 2013
by
Dave Syer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add SpringApplicationErrorHandler
[#48055575] [bs-31] Add hooks for failed application context startup
parent
c2204d66
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
92 additions
and
34 deletions
+92
-34
SpringApplication.java
...main/java/org/springframework/boot/SpringApplication.java
+56
-34
SpringApplicationErrorHandler.java
...g/springframework/boot/SpringApplicationErrorHandler.java
+36
-0
No files found.
spring-boot/src/main/java/org/springframework/boot/SpringApplication.java
View file @
089233e4
...
@@ -259,46 +259,68 @@ public class SpringApplication {
...
@@ -259,46 +259,68 @@ public class SpringApplication {
StopWatch
stopWatch
=
new
StopWatch
();
StopWatch
stopWatch
=
new
StopWatch
();
stopWatch
.
start
();
stopWatch
.
start
();
// Call all non environment aware initializers very early
try
{
callNonEnvironmentAwareSpringApplicationInitializers
(
args
);
// Create and configure the environment
// Call all non environment aware initializers very early
ConfigurableEnvironment
environment
=
getOrCreateEnvironment
();
callNonEnvironmentAwareSpringApplicationInitializers
(
args
);
addPropertySources
(
environment
,
args
);
for
(
String
profile
:
this
.
profiles
)
{
environment
.
addActiveProfile
(
profile
);
}
// Call all remaining initializers
// Create and configure the environment
callEnvironmentAwareSpringApplicationInitializers
(
args
,
environment
);
ConfigurableEnvironment
environment
=
getOrCreateEnvironment
();
Set
<
Object
>
sources
=
assembleSources
();
addPropertySources
(
environment
,
args
);
Assert
.
notEmpty
(
sources
,
"Sources must not be empty"
);
for
(
String
profile
:
this
.
profiles
)
{
if
(
this
.
showBanner
)
{
environment
.
addActiveProfile
(
profile
);
printBanner
();
}
}
// Create, load, refresh and run the ApplicationContext
// Call all remaining initializers
ConfigurableApplicationContext
context
=
createApplicationContext
();
callEnvironmentAwareSpringApplicationInitializers
(
args
,
environment
);
context
.
registerShutdownHook
();
Set
<
Object
>
sources
=
assembleSources
();
context
.
setEnvironment
(
environment
);
Assert
.
notEmpty
(
sources
,
"Sources must not be empty"
);
postProcessApplicationContext
(
context
);
if
(
this
.
showBanner
)
{
applyInitializers
(
context
);
printBanner
();
if
(
this
.
logStartupInfo
)
{
}
logStartupInfo
();
}
// Create, load, refresh and run the ApplicationContext
ConfigurableApplicationContext
context
=
createApplicationContext
();
context
.
registerShutdownHook
();
context
.
setEnvironment
(
environment
);
postProcessApplicationContext
(
context
);
applyInitializers
(
context
);
if
(
this
.
logStartupInfo
)
{
logStartupInfo
();
}
load
(
context
,
sources
.
toArray
(
new
Object
[
sources
.
size
()]));
load
(
context
,
sources
.
toArray
(
new
Object
[
sources
.
size
()]));
refresh
(
context
);
refresh
(
context
);
stopWatch
.
stop
();
stopWatch
.
stop
();
if
(
this
.
logStartupInfo
)
{
if
(
this
.
logStartupInfo
)
{
new
StartupInfoLogger
(
this
.
mainApplicationClass
).
logStarted
(
new
StartupInfoLogger
(
this
.
mainApplicationClass
).
logStarted
(
getApplicationLog
(),
stopWatch
);
getApplicationLog
(),
stopWatch
);
}
runCommandLineRunners
(
context
,
args
);
return
context
;
}
catch
(
RuntimeException
e
)
{
handle
(
e
,
args
);
throw
e
;
}
catch
(
Error
e
)
{
handle
(
e
,
args
);
throw
e
;
}
}
runCommandLineRunners
(
context
,
args
);
}
return
context
;
private
void
handle
(
Throwable
e
,
String
...
args
)
{
List
<
ApplicationContextInitializer
<?>>
initializers
=
new
ArrayList
<
ApplicationContextInitializer
<?>>(
getInitializers
());
Collections
.
reverse
(
initializers
);
for
(
ApplicationContextInitializer
<?>
initializer
:
initializers
)
{
if
(
initializer
instanceof
SpringApplicationErrorHandler
)
{
((
SpringApplicationErrorHandler
)
initializer
).
handle
(
this
,
args
,
e
);
}
}
}
}
private
Set
<
Object
>
assembleSources
()
{
private
Set
<
Object
>
assembleSources
()
{
...
@@ -700,8 +722,8 @@ public class SpringApplication {
...
@@ -700,8 +722,8 @@ public class SpringApplication {
*/
*/
public
List
<
ApplicationContextInitializer
<?>>
getInitializers
()
{
public
List
<
ApplicationContextInitializer
<?>>
getInitializers
()
{
List
<
ApplicationContextInitializer
<?>>
initializers
=
new
ArrayList
<
ApplicationContextInitializer
<?>>(
List
<
ApplicationContextInitializer
<?>>
initializers
=
new
ArrayList
<
ApplicationContextInitializer
<?>>(
this
.
initializers
);
getSpringFactoriesApplicationContextInitializers
()
);
initializers
.
addAll
(
getSpringFactoriesApplicationContextInitializers
()
);
initializers
.
addAll
(
this
.
initializers
);
return
initializers
;
return
initializers
;
}
}
...
...
spring-boot/src/main/java/org/springframework/boot/SpringApplicationErrorHandler.java
0 → 100644
View file @
089233e4
/*
* Copyright 2012-2013 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
;
/**
* Strategy interface that can be used to capture errors in a {@link SpringApplication}
* after it fails to start up.
*
* @author Dave Syer
*/
public
interface
SpringApplicationErrorHandler
{
/**
* Finalize the application.
*
* @param springApplication the spring application.
* @param args the run arguments
* @param e an exception thrown during startup (or null if none)
*/
void
handle
(
SpringApplication
springApplication
,
String
[]
args
,
Throwable
e
);
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment