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
180ab2da
Commit
180ab2da
authored
Jan 26, 2017
by
Andy Wilkinson
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch '1.4.x' into 1.5.x
parents
f34d3095
f3b9b14b
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
85 additions
and
22 deletions
+85
-22
ManagementContextConfiguration.java
...actuate/autoconfigure/ManagementContextConfiguration.java
+7
-1
ManagementContextConfigurationsImportSelector.java
...figure/ManagementContextConfigurationsImportSelector.java
+70
-19
ManagementContextConfigurationsImportSelectorTests.java
...e/ManagementContextConfigurationsImportSelectorTests.java
+8
-2
No files found.
spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementContextConfiguration.java
View file @
180ab2da
/*
* Copyright 2012-201
5
the original author or authors.
* Copyright 2012-201
7
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.
...
...
@@ -23,6 +23,8 @@ import java.lang.annotation.RetentionPolicy;
import
java.lang.annotation.Target
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.core.Ordered
;
import
org.springframework.core.annotation.Order
;
/**
* Specialized {@link Configuration @Configuration} class that defines configuration
...
...
@@ -30,8 +32,12 @@ import org.springframework.context.annotation.Configuration;
* {@code /META-INF/spring.factories} under the
* {@code org.springframework.boot.actuate.autoconfigure.ManagementContextConfiguration}
* key.
* <p>
* {@code ManagementContextConfiguration} classes can be ordered using {@link Order}.
* Ordering by implementing {@link Ordered} is not supported and will have no effect.
*
* @author Phillip Webb
* @author Andy Wilkinson
* @since 1.3.0
*/
@Target
(
ElementType
.
TYPE
)
...
...
spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementContextConfigurationsImportSelector.java
View file @
180ab2da
...
...
@@ -16,19 +16,20 @@
package
org
.
springframework
.
boot
.
actuate
.
autoconfigure
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.LinkedHashSet
;
import
java.util.List
;
import
java.util.
Set
;
import
java.util.
Map
;
import
org.springframework.beans.factory.BeanClassLoaderAware
;
import
org.springframework.context.annotation.DeferredImportSelector
;
import
org.springframework.core.OrderComparator
;
import
org.springframework.core.Ordered
;
import
org.springframework.core.annotation.AnnotationAwareOrderComparator
;
import
org.springframework.core.annotation.Order
;
import
org.springframework.core.io.support.SpringFactoriesLoader
;
import
org.springframework.core.type.AnnotationMetadata
;
import
org.springframework.util.ClassUtils
;
import
org.springframework.core.type.classreading.MetadataReader
;
import
org.springframework.core.type.classreading.SimpleMetadataReaderFactory
;
/**
* Selects configuration classes for the management context configuration. Entries are
...
...
@@ -38,6 +39,7 @@ import org.springframework.util.ClassUtils;
*
* @author Dave Syer
* @author Phillip Webb
* @author Andy Wilkinson
* @see ManagementContextConfiguration
*/
@Order
(
Ordered
.
LOWEST_PRECEDENCE
)
...
...
@@ -48,27 +50,41 @@ class ManagementContextConfigurationsImportSelector
@Override
public
String
[]
selectImports
(
AnnotationMetadata
metadata
)
{
// Find all possible auto configuration classes, filtering duplicates
List
<
String
>
names
=
loadFactoryNames
();
Set
<
Class
<?>>
classes
=
new
LinkedHashSet
<
Class
<?>>();
for
(
String
factoryName
:
names
)
{
classes
.
add
(
ClassUtils
.
resolveClassName
(
factoryName
,
this
.
classLoader
));
// Find all management context configuration classes, filtering duplicates
List
<
ManagementConfiguration
>
configurations
=
getConfigurations
();
OrderComparator
.
sort
(
configurations
);
List
<
String
>
names
=
new
ArrayList
<
String
>();
for
(
ManagementConfiguration
configuration
:
configurations
)
{
names
.
add
(
configuration
.
getClassName
());
}
return
getSortedClassNames
(
new
ArrayList
<
Class
<?>>(
classes
)
);
return
names
.
toArray
(
new
String
[
names
.
size
()]
);
}
protected
List
<
String
>
loadFactoryNames
()
{
return
SpringFactoriesLoader
.
loadFactoryNames
(
ManagementContextConfiguration
.
class
,
this
.
classLoader
);
private
List
<
ManagementConfiguration
>
getConfigurations
()
{
SimpleMetadataReaderFactory
readerFactory
=
new
SimpleMetadataReaderFactory
(
this
.
classLoader
);
List
<
ManagementConfiguration
>
configurations
=
new
ArrayList
<
ManagementConfiguration
>();
for
(
String
className
:
loadFactoryNames
())
{
getConfiguration
(
readerFactory
,
configurations
,
className
);
}
return
configurations
;
}
private
String
[]
getSortedClassNames
(
List
<
Class
<?>>
classes
)
{
AnnotationAwareOrderComparator
.
sort
(
classes
);
List
<
String
>
names
=
new
ArrayList
<
String
>();
for
(
Class
<?>
sourceClass
:
classes
)
{
names
.
add
(
sourceClass
.
getName
(
));
private
void
getConfiguration
(
SimpleMetadataReaderFactory
readerFactory
,
List
<
ManagementConfiguration
>
configurations
,
String
className
)
{
try
{
MetadataReader
metadataReader
=
readerFactory
.
getMetadataReader
(
className
);
configurations
.
add
(
new
ManagementConfiguration
(
metadataReader
));
}
return
names
.
toArray
(
new
String
[
names
.
size
()]);
catch
(
IOException
ex
)
{
throw
new
RuntimeException
(
"Failed to read annotation metadata for '"
+
className
+
"'"
,
ex
);
}
}
protected
List
<
String
>
loadFactoryNames
()
{
return
SpringFactoriesLoader
.
loadFactoryNames
(
ManagementContextConfiguration
.
class
,
this
.
classLoader
);
}
@Override
...
...
@@ -76,4 +92,39 @@ class ManagementContextConfigurationsImportSelector
this
.
classLoader
=
classLoader
;
}
/**
* A management configuration class which can be sorted according to {@code @Order}.
*/
private
static
final
class
ManagementConfiguration
implements
Ordered
{
private
final
String
className
;
private
final
int
order
;
ManagementConfiguration
(
MetadataReader
metadataReader
)
{
AnnotationMetadata
annotationMetadata
=
metadataReader
.
getAnnotationMetadata
();
this
.
order
=
readOrder
(
annotationMetadata
);
this
.
className
=
metadataReader
.
getClassMetadata
().
getClassName
();
}
private
int
readOrder
(
AnnotationMetadata
annotationMetadata
)
{
Map
<
String
,
Object
>
attributes
=
annotationMetadata
.
getAnnotationAttributes
(
Order
.
class
.
getName
());
Integer
order
=
(
attributes
==
null
?
null
:
(
Integer
)
attributes
.
get
(
"value"
));
return
(
order
==
null
?
Ordered
.
LOWEST_PRECEDENCE
:
order
);
}
public
String
getClassName
()
{
return
this
.
className
;
}
@Override
public
int
getOrder
()
{
return
this
.
order
;
}
}
}
spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/ManagementContextConfigurationsImportSelectorTests.java
View file @
180ab2da
...
...
@@ -29,6 +29,7 @@ import static org.assertj.core.api.Assertions.assertThat;
* Tests for {@link ManagementContextConfigurationsImportSelector}.
*
* @author Phillip Webb
* @author Andy Wilkinson
*/
public
class
ManagementContextConfigurationsImportSelectorTests
{
...
...
@@ -37,7 +38,7 @@ public class ManagementContextConfigurationsImportSelectorTests {
String
[]
imports
=
new
TestManagementContextConfigurationsImportSelector
()
.
selectImports
(
null
);
assertThat
(
imports
).
containsExactly
(
A
.
class
.
getName
(),
B
.
class
.
getName
(),
C
.
class
.
getName
());
C
.
class
.
getName
()
,
D
.
class
.
getName
()
);
}
private
static
class
TestManagementContextConfigurationsImportSelector
...
...
@@ -45,7 +46,8 @@ public class ManagementContextConfigurationsImportSelectorTests {
@Override
protected
List
<
String
>
loadFactoryNames
()
{
return
Arrays
.
asList
(
C
.
class
.
getName
(),
A
.
class
.
getName
(),
B
.
class
.
getName
());
return
Arrays
.
asList
(
C
.
class
.
getName
(),
A
.
class
.
getName
(),
D
.
class
.
getName
(),
B
.
class
.
getName
());
}
}
...
...
@@ -65,4 +67,8 @@ public class ManagementContextConfigurationsImportSelectorTests {
}
static
class
D
{
}
}
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