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
35d41e4a
Commit
35d41e4a
authored
Oct 06, 2020
by
Stephane Nicoll
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Remove code deprecated in Spring Boot 2.2
Closes gh-22034
parent
b08da63d
Changes
39
Hide whitespace changes
Inline
Side-by-side
Showing
39 changed files
with
6 additions
and
2560 deletions
+6
-2560
CompositeHealthIndicatorConfiguration.java
...nfigure/health/CompositeHealthIndicatorConfiguration.java
+0
-65
CompositeReactiveHealthIndicatorConfiguration.java
...health/CompositeReactiveHealthIndicatorConfiguration.java
+0
-66
HealthAggregatorStatusAggregatorAdapter.java
...igure/health/HealthAggregatorStatusAggregatorAdapter.java
+0
-59
HealthContributorRegistryHealthIndicatorRegistryAdapter.java
...lthContributorRegistryHealthIndicatorRegistryAdapter.java
+0
-79
HealthEndpointAutoConfiguration.java
...autoconfigure/health/HealthEndpointAutoConfiguration.java
+3
-13
HealthIndicatorAutoConfiguration.java
...utoconfigure/health/HealthIndicatorAutoConfiguration.java
+0
-38
HealthIndicatorProperties.java
...tuate/autoconfigure/health/HealthIndicatorProperties.java
+0
-56
LegacyHealthEndpointAdaptersConfiguration.java
...ure/health/LegacyHealthEndpointAdaptersConfiguration.java
+0
-42
LegacyHealthEndpointCompatibilityConfiguration.java
...ealth/LegacyHealthEndpointCompatibilityConfiguration.java
+0
-74
ReactiveHealthContributorRegistryReactiveHealthIndicatorRegistryAdapter.java
...ibutorRegistryReactiveHealthIndicatorRegistryAdapter.java
+0
-80
HealthAggregatorStatusAggregatorAdapterTests.java
.../health/HealthAggregatorStatusAggregatorAdapterTests.java
+0
-52
HealthContributorRegistryHealthIndicatorRegistryAdapterTests.java
...ntributorRegistryHealthIndicatorRegistryAdapterTests.java
+0
-109
HealthEndpointAutoConfigurationTests.java
...onfigure/health/HealthEndpointAutoConfigurationTests.java
+1
-72
HealthIndicatorRegistryInjectionIntegrationTests.java
...lth/HealthIndicatorRegistryInjectionIntegrationTests.java
+0
-85
ReactiveHealthContributorRegistryReactiveHealthIndicatorRegistryAdapterTests.java
...rRegistryReactiveHealthIndicatorRegistryAdapterTests.java
+0
-110
AbstractHealthAggregator.java
...amework/boot/actuate/health/AbstractHealthAggregator.java
+0
-63
CompositeHealthIndicator.java
...amework/boot/actuate/health/CompositeHealthIndicator.java
+0
-77
CompositeReactiveHealthIndicator.java
...boot/actuate/health/CompositeReactiveHealthIndicator.java
+0
-89
DefaultHealthIndicatorRegistry.java
...k/boot/actuate/health/DefaultHealthIndicatorRegistry.java
+0
-92
DefaultReactiveHealthIndicatorRegistry.java
...ctuate/health/DefaultReactiveHealthIndicatorRegistry.java
+0
-93
HealthAggregator.java
...springframework/boot/actuate/health/HealthAggregator.java
+0
-48
HealthIndicatorNameFactory.java
...ework/boot/actuate/health/HealthIndicatorNameFactory.java
+0
-30
HealthIndicatorReactiveAdapter.java
...k/boot/actuate/health/HealthIndicatorReactiveAdapter.java
+2
-7
HealthIndicatorRegistry.java
...ramework/boot/actuate/health/HealthIndicatorRegistry.java
+0
-70
HealthIndicatorRegistryFactory.java
...k/boot/actuate/health/HealthIndicatorRegistryFactory.java
+0
-64
OrderedHealthAggregator.java
...ramework/boot/actuate/health/OrderedHealthAggregator.java
+0
-108
ReactiveHealthContributor.java
...mework/boot/actuate/health/ReactiveHealthContributor.java
+0
-1
ReactiveHealthIndicatorRegistry.java
.../boot/actuate/health/ReactiveHealthIndicatorRegistry.java
+0
-70
ReactiveHealthIndicatorRegistryFactory.java
...ctuate/health/ReactiveHealthIndicatorRegistryFactory.java
+0
-88
CompositeHealthIndicatorTests.java
...rk/boot/actuate/health/CompositeHealthIndicatorTests.java
+0
-90
CompositeReactiveHealthIndicatorTests.java
...actuate/health/CompositeReactiveHealthIndicatorTests.java
+0
-120
DefaultHealthIndicatorRegistryTests.java
...t/actuate/health/DefaultHealthIndicatorRegistryTests.java
+0
-103
DefaultReactiveHealthIndicatorRegistryTests.java
...e/health/DefaultReactiveHealthIndicatorRegistryTests.java
+0
-104
HealthIndicatorReactiveAdapterTests.java
...t/actuate/health/HealthIndicatorReactiveAdapterTests.java
+0
-1
OrderedHealthAggregatorTests.java
...ork/boot/actuate/health/OrderedHealthAggregatorTests.java
+0
-87
ReactiveHealthContributorTests.java
...k/boot/actuate/health/ReactiveHealthContributorTests.java
+0
-1
ReactiveHealthIndicatorRegistryFactoryTests.java
...e/health/ReactiveHealthIndicatorRegistryFactoryTests.java
+0
-59
ConfigurationBeanFactoryMetadata.java
.../context/properties/ConfigurationBeanFactoryMetadata.java
+0
-93
EnableConfigurationPropertiesRegistrar.java
...xt/properties/EnableConfigurationPropertiesRegistrar.java
+0
-2
No files found.
spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/CompositeHealthIndicatorConfiguration.java
deleted
100644 → 0
View file @
b08da63d
/*
* Copyright 2012-2020 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
*
* https://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
.
actuate
.
autoconfigure
.
health
;
import
java.util.Map
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.actuate.health.HealthIndicator
;
import
org.springframework.core.ResolvableType
;
/**
* Base class for configurations that can combine source beans using a
* {@link org.springframework.boot.actuate.health.CompositeHealthIndicator}.
*
* @param <H> the health indicator type
* @param <S> the bean source type
* @author Stephane Nicoll
* @since 2.0.0
* @deprecated since 2.2.0 in favor of {@link CompositeHealthContributorConfiguration}
*/
@Deprecated
public
abstract
class
CompositeHealthIndicatorConfiguration
<
H
extends
HealthIndicator
,
S
>
{
@Autowired
private
org
.
springframework
.
boot
.
actuate
.
health
.
HealthAggregator
healthAggregator
;
protected
HealthIndicator
createHealthIndicator
(
Map
<
String
,
S
>
beans
)
{
if
(
beans
.
size
()
==
1
)
{
return
createHealthIndicator
(
beans
.
values
().
iterator
().
next
());
}
org
.
springframework
.
boot
.
actuate
.
health
.
HealthIndicatorRegistry
registry
=
new
org
.
springframework
.
boot
.
actuate
.
health
.
DefaultHealthIndicatorRegistry
();
beans
.
forEach
((
name
,
source
)
->
registry
.
register
(
name
,
createHealthIndicator
(
source
)));
return
new
org
.
springframework
.
boot
.
actuate
.
health
.
CompositeHealthIndicator
(
this
.
healthAggregator
,
registry
);
}
@SuppressWarnings
(
"unchecked"
)
protected
H
createHealthIndicator
(
S
source
)
{
Class
<?>[]
generics
=
ResolvableType
.
forClass
(
CompositeHealthIndicatorConfiguration
.
class
,
getClass
())
.
resolveGenerics
();
Class
<
H
>
indicatorClass
=
(
Class
<
H
>)
generics
[
0
];
Class
<
S
>
sourceClass
=
(
Class
<
S
>)
generics
[
1
];
try
{
return
indicatorClass
.
getConstructor
(
sourceClass
).
newInstance
(
source
);
}
catch
(
Exception
ex
)
{
throw
new
IllegalStateException
(
"Unable to create indicator "
+
indicatorClass
+
" for source "
+
sourceClass
,
ex
);
}
}
}
spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/CompositeReactiveHealthIndicatorConfiguration.java
deleted
100644 → 0
View file @
b08da63d
/*
* Copyright 2012-2020 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
*
* https://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
.
actuate
.
autoconfigure
.
health
;
import
java.util.Map
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.actuate.health.ReactiveHealthIndicator
;
import
org.springframework.core.ResolvableType
;
/**
* Reactive variant of {@link CompositeHealthIndicatorConfiguration}.
*
* @param <H> the health indicator type
* @param <S> the bean source type
* @author Stephane Nicoll
* @since 2.0.0
* @deprecated since 2.2.0 in favor of
* {@link CompositeReactiveHealthContributorConfiguration}
*/
@Deprecated
public
abstract
class
CompositeReactiveHealthIndicatorConfiguration
<
H
extends
ReactiveHealthIndicator
,
S
>
{
@Autowired
private
org
.
springframework
.
boot
.
actuate
.
health
.
HealthAggregator
healthAggregator
;
protected
ReactiveHealthIndicator
createHealthIndicator
(
Map
<
String
,
S
>
beans
)
{
if
(
beans
.
size
()
==
1
)
{
return
createHealthIndicator
(
beans
.
values
().
iterator
().
next
());
}
org
.
springframework
.
boot
.
actuate
.
health
.
ReactiveHealthIndicatorRegistry
registry
=
new
org
.
springframework
.
boot
.
actuate
.
health
.
DefaultReactiveHealthIndicatorRegistry
();
beans
.
forEach
((
name
,
source
)
->
registry
.
register
(
name
,
createHealthIndicator
(
source
)));
return
new
org
.
springframework
.
boot
.
actuate
.
health
.
CompositeReactiveHealthIndicator
(
this
.
healthAggregator
,
registry
);
}
@SuppressWarnings
(
"unchecked"
)
protected
H
createHealthIndicator
(
S
source
)
{
Class
<?>[]
generics
=
ResolvableType
.
forClass
(
CompositeReactiveHealthIndicatorConfiguration
.
class
,
getClass
())
.
resolveGenerics
();
Class
<
H
>
indicatorClass
=
(
Class
<
H
>)
generics
[
0
];
Class
<
S
>
sourceClass
=
(
Class
<
S
>)
generics
[
1
];
try
{
return
indicatorClass
.
getConstructor
(
sourceClass
).
newInstance
(
source
);
}
catch
(
Exception
ex
)
{
throw
new
IllegalStateException
(
"Unable to create indicator "
+
indicatorClass
+
" for source "
+
sourceClass
,
ex
);
}
}
}
spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthAggregatorStatusAggregatorAdapter.java
deleted
100644 → 0
View file @
b08da63d
/*
* Copyright 2012-2020 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
*
* https://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
.
actuate
.
autoconfigure
.
health
;
import
java.util.LinkedHashMap
;
import
java.util.Map
;
import
java.util.Set
;
import
org.springframework.boot.actuate.health.Health
;
import
org.springframework.boot.actuate.health.Status
;
import
org.springframework.boot.actuate.health.StatusAggregator
;
/**
* Adapter class to convert a legacy
* {@link org.springframework.boot.actuate.health.HealthAggregator} to a
* {@link StatusAggregator}.
*
* @author Phillip Webb
*/
@SuppressWarnings
(
"deprecation"
)
class
HealthAggregatorStatusAggregatorAdapter
implements
StatusAggregator
{
private
org
.
springframework
.
boot
.
actuate
.
health
.
HealthAggregator
healthAggregator
;
HealthAggregatorStatusAggregatorAdapter
(
org
.
springframework
.
boot
.
actuate
.
health
.
HealthAggregator
healthAggregator
)
{
this
.
healthAggregator
=
healthAggregator
;
}
@Override
public
Status
getAggregateStatus
(
Set
<
Status
>
statuses
)
{
int
index
=
0
;
Map
<
String
,
Health
>
healths
=
new
LinkedHashMap
<>();
for
(
Status
status
:
statuses
)
{
index
++;
healths
.
put
(
"health"
+
index
,
asHealth
(
status
));
}
Health
aggregate
=
this
.
healthAggregator
.
aggregate
(
healths
);
return
aggregate
.
getStatus
();
}
private
Health
asHealth
(
Status
status
)
{
return
Health
.
status
(
status
).
build
();
}
}
spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthContributorRegistryHealthIndicatorRegistryAdapter.java
deleted
100644 → 0
View file @
b08da63d
/*
* Copyright 2012-2020 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
*
* https://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
.
actuate
.
autoconfigure
.
health
;
import
java.util.LinkedHashMap
;
import
java.util.Map
;
import
org.springframework.boot.actuate.health.HealthContributor
;
import
org.springframework.boot.actuate.health.HealthContributorRegistry
;
import
org.springframework.boot.actuate.health.HealthIndicator
;
import
org.springframework.boot.actuate.health.NamedContributor
;
import
org.springframework.util.Assert
;
/**
* Adapter class to convert a {@link HealthContributorRegistry} to a legacy
* {@link org.springframework.boot.actuate.health.HealthIndicatorRegistry}.
*
* @author Phillip Webb
*/
@SuppressWarnings
(
"deprecation"
)
class
HealthContributorRegistryHealthIndicatorRegistryAdapter
implements
org
.
springframework
.
boot
.
actuate
.
health
.
HealthIndicatorRegistry
{
private
final
HealthContributorRegistry
contributorRegistry
;
HealthContributorRegistryHealthIndicatorRegistryAdapter
(
HealthContributorRegistry
contributorRegistry
)
{
Assert
.
notNull
(
contributorRegistry
,
"ContributorRegistry must not be null"
);
this
.
contributorRegistry
=
contributorRegistry
;
}
@Override
public
void
register
(
String
name
,
HealthIndicator
healthIndicator
)
{
this
.
contributorRegistry
.
registerContributor
(
name
,
healthIndicator
);
}
@Override
public
HealthIndicator
unregister
(
String
name
)
{
HealthContributor
contributor
=
this
.
contributorRegistry
.
unregisterContributor
(
name
);
if
(
contributor
instanceof
HealthIndicator
)
{
return
(
HealthIndicator
)
contributor
;
}
return
null
;
}
@Override
public
HealthIndicator
get
(
String
name
)
{
HealthContributor
contributor
=
this
.
contributorRegistry
.
getContributor
(
name
);
if
(
contributor
instanceof
HealthIndicator
)
{
return
(
HealthIndicator
)
contributor
;
}
return
null
;
}
@Override
public
Map
<
String
,
HealthIndicator
>
getAll
()
{
Map
<
String
,
HealthIndicator
>
all
=
new
LinkedHashMap
<>();
for
(
NamedContributor
<?>
namedContributor
:
this
.
contributorRegistry
)
{
if
(
namedContributor
.
getContributor
()
instanceof
HealthIndicator
)
{
all
.
put
(
namedContributor
.
getName
(),
(
HealthIndicator
)
namedContributor
.
getContributor
());
}
}
return
all
;
}
}
spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthEndpointAutoConfiguration.java
View file @
35d41e4a
...
...
@@ -20,7 +20,6 @@ import org.springframework.boot.actuate.autoconfigure.endpoint.condition.Conditi
import
org.springframework.boot.actuate.health.HealthEndpoint
;
import
org.springframework.boot.autoconfigure.EnableAutoConfiguration
;
import
org.springframework.boot.context.properties.EnableConfigurationProperties
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Import
;
...
...
@@ -30,23 +29,14 @@ import org.springframework.context.annotation.Import;
* @author Andy Wilkinson
* @author Stephane Nicoll
* @author Phillip Webb
* @author Scott Frederick
* @since 2.0.0
*/
@Configuration
(
proxyBeanMethods
=
false
)
@ConditionalOnAvailableEndpoint
(
endpoint
=
HealthEndpoint
.
class
)
@EnableConfigurationProperties
@Import
({
LegacyHealthEndpointAdaptersConfiguration
.
class
,
LegacyHealthEndpointCompatibilityConfiguration
.
class
,
HealthEndpointConfiguration
.
class
,
ReactiveHealthEndpointConfiguration
.
class
,
@EnableConfigurationProperties
(
HealthEndpointProperties
.
class
)
@Import
({
HealthEndpointConfiguration
.
class
,
ReactiveHealthEndpointConfiguration
.
class
,
HealthEndpointWebExtensionConfiguration
.
class
,
HealthEndpointReactiveWebExtensionConfiguration
.
class
})
public
class
HealthEndpointAutoConfiguration
{
@Bean
@SuppressWarnings
(
"deprecation"
)
HealthEndpointProperties
healthEndpointProperties
(
HealthIndicatorProperties
healthIndicatorProperties
)
{
HealthEndpointProperties
healthEndpointProperties
=
new
HealthEndpointProperties
();
healthEndpointProperties
.
getStatus
().
getOrder
().
addAll
(
healthIndicatorProperties
.
getOrder
());
healthEndpointProperties
.
getStatus
().
getHttpMapping
().
putAll
(
healthIndicatorProperties
.
getHttpMapping
());
return
healthEndpointProperties
;
}
}
spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorAutoConfiguration.java
deleted
100644 → 0
View file @
b08da63d
/*
* Copyright 2012-2020 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
*
* https://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
.
actuate
.
autoconfigure
.
health
;
import
org.springframework.boot.actuate.health.HealthContributor
;
import
org.springframework.boot.autoconfigure.EnableAutoConfiguration
;
import
org.springframework.context.annotation.Configuration
;
/**
* {@link EnableAutoConfiguration Auto-configuration} for {@link HealthContributor health
* contributors}.
*
* @author Andy Wilkinson
* @author Stephane Nicoll
* @author Phillip Webb
* @author Vedran Pavic
* @since 2.0.0
* @deprecated since 2.2.0 in favor of {@link HealthContributorAutoConfiguration}
*/
@Deprecated
@Configuration
(
proxyBeanMethods
=
false
)
public
class
HealthIndicatorAutoConfiguration
{
}
spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorProperties.java
deleted
100644 → 0
View file @
b08da63d
/*
* Copyright 2012-2020 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
*
* https://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
.
actuate
.
autoconfigure
.
health
;
import
java.util.ArrayList
;
import
java.util.LinkedHashMap
;
import
java.util.List
;
import
java.util.Map
;
import
org.springframework.boot.context.properties.ConfigurationProperties
;
import
org.springframework.boot.context.properties.DeprecatedConfigurationProperty
;
/**
* Configuration properties for some health properties.
*
* @author Christian Dupuis
* @since 2.0.0
* @deprecated since 2.2.0 in favor of {@link HealthEndpointProperties}
*/
@Deprecated
@ConfigurationProperties
(
prefix
=
"management.health.status"
)
public
class
HealthIndicatorProperties
{
private
List
<
String
>
order
=
new
ArrayList
<>();
private
final
Map
<
String
,
Integer
>
httpMapping
=
new
LinkedHashMap
<>();
@DeprecatedConfigurationProperty
(
replacement
=
"management.endpoint.health.status.order"
)
public
List
<
String
>
getOrder
()
{
return
this
.
order
;
}
public
void
setOrder
(
List
<
String
>
order
)
{
this
.
order
=
order
;
}
@DeprecatedConfigurationProperty
(
replacement
=
"management.endpoint.health.status.http-mapping"
)
public
Map
<
String
,
Integer
>
getHttpMapping
()
{
return
this
.
httpMapping
;
}
}
spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/LegacyHealthEndpointAdaptersConfiguration.java
deleted
100644 → 0
View file @
b08da63d
/*
* Copyright 2012-2020 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
*
* https://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
.
actuate
.
autoconfigure
.
health
;
import
org.springframework.boot.actuate.health.StatusAggregator
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnBean
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
/**
* Configuration to adapt legacy deprecated health endpoint classes and interfaces.
*
* @author Phillip Webb
* @author Scott Frederick
* @see HealthEndpointAutoConfiguration
*/
@Configuration
(
proxyBeanMethods
=
false
)
@SuppressWarnings
(
"deprecation"
)
class
LegacyHealthEndpointAdaptersConfiguration
{
@Bean
@ConditionalOnBean
(
org
.
springframework
.
boot
.
actuate
.
health
.
HealthAggregator
.
class
)
StatusAggregator
healthAggregatorStatusAggregatorAdapter
(
org
.
springframework
.
boot
.
actuate
.
health
.
HealthAggregator
healthAggregator
)
{
return
new
HealthAggregatorStatusAggregatorAdapter
(
healthAggregator
);
}
}
spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/LegacyHealthEndpointCompatibilityConfiguration.java
deleted
100644 → 0
View file @
b08da63d
/*
* Copyright 2012-2020 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
*
* https://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
.
actuate
.
autoconfigure
.
health
;
import
reactor.core.publisher.Mono
;
import
org.springframework.boot.actuate.health.HealthContributorRegistry
;
import
org.springframework.boot.actuate.health.ReactiveHealthContributorRegistry
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnClass
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
;
import
org.springframework.boot.context.properties.EnableConfigurationProperties
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.util.CollectionUtils
;
/**
* Configuration to adapt legacy deprecated health endpoint classes and interfaces.
*
* @author Phillip Webb
* @author Scott Frederick
* @see HealthEndpointAutoConfiguration
*/
@Configuration
(
proxyBeanMethods
=
false
)
@SuppressWarnings
(
"deprecation"
)
@EnableConfigurationProperties
(
org
.
springframework
.
boot
.
actuate
.
autoconfigure
.
health
.
HealthIndicatorProperties
.
class
)
class
LegacyHealthEndpointCompatibilityConfiguration
{
@Bean
@ConditionalOnMissingBean
org
.
springframework
.
boot
.
actuate
.
health
.
HealthAggregator
healthAggregator
(
HealthIndicatorProperties
healthIndicatorProperties
)
{
org
.
springframework
.
boot
.
actuate
.
health
.
OrderedHealthAggregator
aggregator
=
new
org
.
springframework
.
boot
.
actuate
.
health
.
OrderedHealthAggregator
();
if
(!
CollectionUtils
.
isEmpty
(
healthIndicatorProperties
.
getOrder
()))
{
aggregator
.
setStatusOrder
(
healthIndicatorProperties
.
getOrder
());
}
return
aggregator
;
}
@Bean
@ConditionalOnMissingBean
(
org
.
springframework
.
boot
.
actuate
.
health
.
HealthIndicatorRegistry
.
class
)
HealthContributorRegistryHealthIndicatorRegistryAdapter
healthIndicatorRegistry
(
HealthContributorRegistry
healthContributorRegistry
)
{
return
new
HealthContributorRegistryHealthIndicatorRegistryAdapter
(
healthContributorRegistry
);
}
@Configuration
(
proxyBeanMethods
=
false
)
@ConditionalOnClass
(
Mono
.
class
)
static
class
LegacyReactiveHealthEndpointCompatibilityConfiguration
{
@Bean
@ConditionalOnMissingBean
(
org
.
springframework
.
boot
.
actuate
.
health
.
ReactiveHealthIndicatorRegistry
.
class
)
ReactiveHealthContributorRegistryReactiveHealthIndicatorRegistryAdapter
reactiveHealthIndicatorRegistry
(
ReactiveHealthContributorRegistry
reactiveHealthContributorRegistry
)
{
return
new
ReactiveHealthContributorRegistryReactiveHealthIndicatorRegistryAdapter
(
reactiveHealthContributorRegistry
);
}
}
}
spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/ReactiveHealthContributorRegistryReactiveHealthIndicatorRegistryAdapter.java
deleted
100644 → 0
View file @
b08da63d
/*
* Copyright 2012-2020 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
*
* https://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
.
actuate
.
autoconfigure
.
health
;
import
java.util.LinkedHashMap
;
import
java.util.Map
;
import
org.springframework.boot.actuate.health.NamedContributor
;
import
org.springframework.boot.actuate.health.ReactiveHealthContributor
;
import
org.springframework.boot.actuate.health.ReactiveHealthContributorRegistry
;
import
org.springframework.boot.actuate.health.ReactiveHealthIndicator
;
import
org.springframework.util.Assert
;
/**
* Adapter class to convert a {@link ReactiveHealthContributorRegistry} to a legacy
* {@link org.springframework.boot.actuate.health.ReactiveHealthIndicatorRegistry}.
*
* @author Phillip Webb
*/
@SuppressWarnings
(
"deprecation"
)
class
ReactiveHealthContributorRegistryReactiveHealthIndicatorRegistryAdapter
implements
org
.
springframework
.
boot
.
actuate
.
health
.
ReactiveHealthIndicatorRegistry
{
private
final
ReactiveHealthContributorRegistry
contributorRegistry
;
ReactiveHealthContributorRegistryReactiveHealthIndicatorRegistryAdapter
(
ReactiveHealthContributorRegistry
contributorRegistry
)
{
Assert
.
notNull
(
contributorRegistry
,
"ContributorRegistry must not be null"
);
this
.
contributorRegistry
=
contributorRegistry
;
}
@Override
public
void
register
(
String
name
,
ReactiveHealthIndicator
healthIndicator
)
{
this
.
contributorRegistry
.
registerContributor
(
name
,
healthIndicator
);
}
@Override
public
ReactiveHealthIndicator
unregister
(
String
name
)
{
ReactiveHealthContributor
contributor
=
this
.
contributorRegistry
.
unregisterContributor
(
name
);
if
(
contributor
instanceof
ReactiveHealthIndicator
)
{
return
(
ReactiveHealthIndicator
)
contributor
;
}
return
null
;
}
@Override
public
ReactiveHealthIndicator
get
(
String
name
)
{
ReactiveHealthContributor
contributor
=
this
.
contributorRegistry
.
getContributor
(
name
);
if
(
contributor
instanceof
ReactiveHealthIndicator
)
{
return
(
ReactiveHealthIndicator
)
contributor
;
}
return
null
;
}
@Override
public
Map
<
String
,
ReactiveHealthIndicator
>
getAll
()
{
Map
<
String
,
ReactiveHealthIndicator
>
all
=
new
LinkedHashMap
<>();
for
(
NamedContributor
<?>
namedContributor
:
this
.
contributorRegistry
)
{
if
(
namedContributor
.
getContributor
()
instanceof
ReactiveHealthIndicator
)
{
all
.
put
(
namedContributor
.
getName
(),
(
ReactiveHealthIndicator
)
namedContributor
.
getContributor
());
}
}
return
all
;
}
}
spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthAggregatorStatusAggregatorAdapterTests.java
deleted
100644 → 0
View file @
b08da63d
/*
* Copyright 2012-2020 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
*
* https://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
.
actuate
.
autoconfigure
.
health
;
import
java.util.List
;
import
org.junit.jupiter.api.Test
;
import
org.springframework.boot.actuate.health.Status
;
import
org.springframework.boot.actuate.health.StatusAggregator
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
/**
* Tests for {@link HealthAggregatorStatusAggregatorAdapter}.
*
* @author Phillip Webb
*/
@SuppressWarnings
(
"deprecation"
)
class
HealthAggregatorStatusAggregatorAdapterTests
{
@Test
void
getAggregateStatusDelegateToHealthAggregator
()
{
StatusAggregator
adapter
=
new
HealthAggregatorStatusAggregatorAdapter
(
new
TestHealthAggregator
());
Status
status
=
adapter
.
getAggregateStatus
(
Status
.
UP
,
Status
.
DOWN
);
assertThat
(
status
.
getCode
()).
isEqualTo
(
"called2"
);
}
private
static
class
TestHealthAggregator
extends
org
.
springframework
.
boot
.
actuate
.
health
.
AbstractHealthAggregator
{
@Override
protected
Status
aggregateStatus
(
List
<
Status
>
candidates
)
{
return
new
Status
(
"called"
+
candidates
.
size
());
}
}
}
spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthContributorRegistryHealthIndicatorRegistryAdapterTests.java
deleted
100644 → 0
View file @
b08da63d
/*
* Copyright 2012-2020 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
*
* https://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
.
actuate
.
autoconfigure
.
health
;
import
java.util.Map
;
import
org.junit.jupiter.api.Test
;
import
org.springframework.boot.actuate.health.CompositeHealthContributor
;
import
org.springframework.boot.actuate.health.DefaultHealthContributorRegistry
;
import
org.springframework.boot.actuate.health.HealthContributorRegistry
;
import
org.springframework.boot.actuate.health.HealthIndicator
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThatIllegalArgumentException
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
entry
;
import
static
org
.
mockito
.
Mockito
.
mock
;
/**
* Tests for {@link HealthContributorRegistryHealthIndicatorRegistryAdapter}.
*
* @author Phillip Webb
*/
class
HealthContributorRegistryHealthIndicatorRegistryAdapterTests
{
private
HealthContributorRegistry
contributorRegistry
=
new
DefaultHealthContributorRegistry
();
private
HealthContributorRegistryHealthIndicatorRegistryAdapter
adapter
=
new
HealthContributorRegistryHealthIndicatorRegistryAdapter
(
this
.
contributorRegistry
);
@Test
void
createWhenContributorRegistryIsNullThrowsException
()
{
assertThatIllegalArgumentException
()
.
isThrownBy
(()
->
new
HealthContributorRegistryHealthIndicatorRegistryAdapter
(
null
))
.
withMessage
(
"ContributorRegistry must not be null"
);
}
@Test
void
registerDelegatesToContributorRegistry
()
{
HealthIndicator
healthIndicator
=
mock
(
HealthIndicator
.
class
);
this
.
adapter
.
register
(
"test"
,
healthIndicator
);
assertThat
(
this
.
contributorRegistry
.
getContributor
(
"test"
)).
isSameAs
(
healthIndicator
);
}
@Test
void
unregisterDelegatesToContributorRegistry
()
{
HealthIndicator
healthIndicator
=
mock
(
HealthIndicator
.
class
);
this
.
contributorRegistry
.
registerContributor
(
"test"
,
healthIndicator
);
HealthIndicator
unregistered
=
this
.
adapter
.
unregister
(
"test"
);
assertThat
(
unregistered
).
isSameAs
(
healthIndicator
);
assertThat
(
this
.
contributorRegistry
.
getContributor
(
"test"
)).
isNull
();
}
@Test
void
unregisterWhenContributorRegistryResultIsNotHealthIndicatorReturnsNull
()
{
CompositeHealthContributor
healthContributor
=
mock
(
CompositeHealthContributor
.
class
);
this
.
contributorRegistry
.
registerContributor
(
"test"
,
healthContributor
);
HealthIndicator
unregistered
=
this
.
adapter
.
unregister
(
"test"
);
assertThat
(
unregistered
).
isNull
();
assertThat
(
this
.
contributorRegistry
.
getContributor
(
"test"
)).
isNull
();
}
@Test
void
getDelegatesToContributorRegistry
()
{
HealthIndicator
healthIndicator
=
mock
(
HealthIndicator
.
class
);
this
.
contributorRegistry
.
registerContributor
(
"test"
,
healthIndicator
);
assertThat
(
this
.
adapter
.
get
(
"test"
)).
isSameAs
(
healthIndicator
);
}
@Test
void
getWhenContributorRegistryResultIsNotHealthIndicatorReturnsNull
()
{
CompositeHealthContributor
healthContributor
=
mock
(
CompositeHealthContributor
.
class
);
this
.
contributorRegistry
.
registerContributor
(
"test"
,
healthContributor
);
assertThat
(
this
.
adapter
.
get
(
"test"
)).
isNull
();
}
@Test
void
getAllDelegatesToContributorRegistry
()
{
HealthIndicator
healthIndicator
=
mock
(
HealthIndicator
.
class
);
this
.
contributorRegistry
.
registerContributor
(
"test"
,
healthIndicator
);
Map
<
String
,
HealthIndicator
>
all
=
this
.
adapter
.
getAll
();
assertThat
(
all
).
containsOnly
(
entry
(
"test"
,
healthIndicator
));
}
@Test
void
getAllWhenContributorRegistryContainsNonHealthIndicatorInstancesReturnsFilteredMap
()
{
CompositeHealthContributor
healthContributor
=
mock
(
CompositeHealthContributor
.
class
);
this
.
contributorRegistry
.
registerContributor
(
"test1"
,
healthContributor
);
HealthIndicator
healthIndicator
=
mock
(
HealthIndicator
.
class
);
this
.
contributorRegistry
.
registerContributor
(
"test2"
,
healthIndicator
);
Map
<
String
,
HealthIndicator
>
all
=
this
.
adapter
.
getAll
();
assertThat
(
all
).
containsOnly
(
entry
(
"test2"
,
healthIndicator
));
}
}
spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthEndpointAutoConfigurationTests.java
View file @
35d41e4a
...
...
@@ -17,9 +17,6 @@
package
org
.
springframework
.
boot
.
actuate
.
autoconfigure
.
health
;
import
java.util.Collections
;
import
java.util.LinkedHashMap
;
import
java.util.List
;
import
java.util.Map
;
import
org.junit.jupiter.api.Test
;
import
reactor.core.publisher.Flux
;
...
...
@@ -65,7 +62,6 @@ import static org.mockito.Mockito.mock;
* @author Stephane Nicoll
* @author Scott Frederick
*/
@SuppressWarnings
(
"deprecation"
)
class
HealthEndpointAutoConfigurationTests
{
private
final
WebApplicationContextRunner
contextRunner
=
new
WebApplicationContextRunner
()
...
...
@@ -90,14 +86,6 @@ class HealthEndpointAutoConfigurationTests {
});
}
@Test
void
runWhenHasHealthAggregatorAdaptsToStatusAggregator
()
{
this
.
contextRunner
.
withUserConfiguration
(
HealthAggregatorConfiguration
.
class
).
run
((
context
)
->
{
StatusAggregator
aggregator
=
context
.
getBean
(
StatusAggregator
.
class
);
assertThat
(
aggregator
.
getAggregateStatus
(
Status
.
UP
,
Status
.
DOWN
)).
isEqualTo
(
Status
.
UNKNOWN
);
});
}
@Test
void
runCreatesStatusAggregatorFromProperties
()
{
this
.
contextRunner
.
withPropertyValues
(
"management.endpoint.health.status.order=up,down"
).
run
((
context
)
->
{
...
...
@@ -106,18 +94,10 @@ class HealthEndpointAutoConfigurationTests {
});
}
@Test
void
runWhenUsingDeprecatedPropertyCreatesStatusAggregatorFromProperties
()
{
this
.
contextRunner
.
withPropertyValues
(
"management.health.status.order=up,down"
).
run
((
context
)
->
{
StatusAggregator
aggregator
=
context
.
getBean
(
StatusAggregator
.
class
);
assertThat
(
aggregator
.
getAggregateStatus
(
Status
.
UP
,
Status
.
DOWN
)).
isEqualTo
(
Status
.
UP
);
});
}
@Test
void
runWhenHasStatusAggregatorBeanIgnoresProperties
()
{
this
.
contextRunner
.
withUserConfiguration
(
StatusAggregatorConfiguration
.
class
)
.
withPropertyValues
(
"management.health.status.order=up,down"
).
run
((
context
)
->
{
.
withPropertyValues
(
"management.
endpoint.
health.status.order=up,down"
).
run
((
context
)
->
{
StatusAggregator
aggregator
=
context
.
getBean
(
StatusAggregator
.
class
);
assertThat
(
aggregator
.
getAggregateStatus
(
Status
.
UP
,
Status
.
DOWN
)).
isEqualTo
(
Status
.
UNKNOWN
);
});
...
...
@@ -132,14 +112,6 @@ class HealthEndpointAutoConfigurationTests {
});
}
@Test
void
runUsingDeprecatedPropertyCreatesHttpCodeStatusMapperFromProperties
()
{
this
.
contextRunner
.
withPropertyValues
(
"management.health.status.http-mapping.up=123"
).
run
((
context
)
->
{
HttpCodeStatusMapper
mapper
=
context
.
getBean
(
HttpCodeStatusMapper
.
class
);
assertThat
(
mapper
.
getStatusCode
(
Status
.
UP
)).
isEqualTo
(
123
);
});
}
@Test
void
runWhenHasHttpCodeStatusMapperBeanIgnoresProperties
()
{
this
.
contextRunner
.
withUserConfiguration
(
HttpCodeStatusMapperConfiguration
.
class
)
...
...
@@ -277,32 +249,6 @@ class HealthEndpointAutoConfigurationTests {
});
}
@Test
// gh-18354
void
runCreatesLegacyHealthAggregator
()
{
this
.
contextRunner
.
run
((
context
)
->
{
org
.
springframework
.
boot
.
actuate
.
health
.
HealthAggregator
aggregator
=
context
.
getBean
(
org
.
springframework
.
boot
.
actuate
.
health
.
HealthAggregator
.
class
);
Map
<
String
,
Health
>
healths
=
new
LinkedHashMap
<>();
healths
.
put
(
"one"
,
Health
.
up
().
build
());
healths
.
put
(
"two"
,
Health
.
down
().
build
());
Health
result
=
aggregator
.
aggregate
(
healths
);
assertThat
(
result
.
getStatus
()).
isEqualTo
(
Status
.
DOWN
);
});
}
@Test
void
runWhenReactorAvailableCreatesReactiveHealthIndicatorRegistryBean
()
{
this
.
contextRunner
.
run
((
context
)
->
assertThat
(
context
)
.
hasSingleBean
(
org
.
springframework
.
boot
.
actuate
.
health
.
ReactiveHealthIndicatorRegistry
.
class
));
}
@Test
// gh-18570
void
runWhenReactorUnavailableDoesNotCreateReactiveHealthIndicatorRegistryBean
()
{
this
.
contextRunner
.
withClassLoader
(
new
FilteredClassLoader
(
Mono
.
class
.
getPackage
().
getName
()))
.
run
((
context
)
->
assertThat
(
context
).
doesNotHaveBean
(
org
.
springframework
.
boot
.
actuate
.
health
.
ReactiveHealthIndicatorRegistry
.
class
));
}
@Test
void
runWhenHasHealthEndpointGroupsPostProcessorPerformsProcessing
()
{
this
.
contextRunner
.
withPropertyValues
(
"management.endpoint.health.group.ready.include=*"
).
withUserConfiguration
(
...
...
@@ -333,23 +279,6 @@ class HealthEndpointAutoConfigurationTests {
}
@Configuration
(
proxyBeanMethods
=
false
)
static
class
HealthAggregatorConfiguration
{
@Bean
org
.
springframework
.
boot
.
actuate
.
health
.
HealthAggregator
healthAggregator
()
{
return
new
org
.
springframework
.
boot
.
actuate
.
health
.
AbstractHealthAggregator
()
{
@Override
protected
Status
aggregateStatus
(
List
<
Status
>
candidates
)
{
return
Status
.
UNKNOWN
;
}
};
}
}
@Configuration
(
proxyBeanMethods
=
false
)
static
class
StatusAggregatorConfiguration
{
...
...
spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorRegistryInjectionIntegrationTests.java
deleted
100644 → 0
View file @
b08da63d
/*
* Copyright 2012-2020 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
*
* https://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
.
actuate
.
autoconfigure
.
health
;
import
io.micrometer.core.instrument.Gauge
;
import
io.micrometer.core.instrument.MeterRegistry
;
import
org.junit.jupiter.api.Test
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryAutoConfiguration
;
import
org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration
;
import
org.springframework.boot.actuate.health.Status
;
import
org.springframework.boot.autoconfigure.ImportAutoConfiguration
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.boot.test.context.SpringBootTest.WebEnvironment
;
import
org.springframework.context.annotation.Configuration
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
/**
* Integration test to ensure that the legacy
* {@link org.springframework.boot.actuate.health.HealthIndicatorRegistry} can still be
* injected.
*
* @author Phillip Webb
*/
@SuppressWarnings
(
"deprecation"
)
@SpringBootTest
(
webEnvironment
=
WebEnvironment
.
NONE
)
public
class
HealthIndicatorRegistryInjectionIntegrationTests
{
// gh-18194
@Test
void
meterRegistryBeanHasBeenConfigured
(
@Autowired
MeterRegistry
meterRegistry
)
{
assertThat
(
meterRegistry
).
isNotNull
();
assertThat
(
meterRegistry
.
get
(
"health"
).
gauge
()).
isNotNull
();
}
@Configuration
@ImportAutoConfiguration
({
HealthEndpointAutoConfiguration
.
class
,
HealthContributorAutoConfiguration
.
class
,
MeterRegistryAutoConfiguration
.
class
,
MetricsAutoConfiguration
.
class
})
static
class
Config
{
Config
(
org
.
springframework
.
boot
.
actuate
.
health
.
HealthAggregator
healthAggregator
,
org
.
springframework
.
boot
.
actuate
.
health
.
HealthIndicatorRegistry
healthIndicatorRegistry
,
MeterRegistry
registry
)
{
org
.
springframework
.
boot
.
actuate
.
health
.
CompositeHealthIndicator
healthIndicator
=
new
org
.
springframework
.
boot
.
actuate
.
health
.
CompositeHealthIndicator
(
healthAggregator
,
healthIndicatorRegistry
);
Gauge
.
builder
(
"health"
,
healthIndicator
,
this
::
getGaugeValue
)
.
description
(
"Spring boot health indicator. 3=UP, 2=OUT_OF_SERVICE, 1=DOWN, 0=UNKNOWN"
)
.
strongReference
(
true
).
register
(
registry
);
}
private
double
getGaugeValue
(
org
.
springframework
.
boot
.
actuate
.
health
.
CompositeHealthIndicator
health
)
{
Status
status
=
health
.
health
().
getStatus
();
switch
(
status
.
getCode
())
{
case
"UP"
:
return
3
;
case
"OUT_OF_SERVICE"
:
return
2
;
case
"DOWN"
:
return
1
;
case
"UNKNOWN"
:
default
:
return
0
;
}
}
}
}
spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/ReactiveHealthContributorRegistryReactiveHealthIndicatorRegistryAdapterTests.java
deleted
100644 → 0
View file @
b08da63d
/*
* Copyright 2012-2020 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
*
* https://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
.
actuate
.
autoconfigure
.
health
;
import
java.util.Map
;
import
org.junit.jupiter.api.Test
;
import
org.springframework.boot.actuate.health.CompositeReactiveHealthContributor
;
import
org.springframework.boot.actuate.health.DefaultReactiveHealthContributorRegistry
;
import
org.springframework.boot.actuate.health.ReactiveHealthContributorRegistry
;
import
org.springframework.boot.actuate.health.ReactiveHealthIndicator
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThatIllegalArgumentException
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
entry
;
import
static
org
.
mockito
.
Mockito
.
mock
;
/**
* Test for
* {@link ReactiveHealthContributorRegistryReactiveHealthIndicatorRegistryAdapter}.
*
* @author Phillip Webb
*/
class
ReactiveHealthContributorRegistryReactiveHealthIndicatorRegistryAdapterTests
{
private
ReactiveHealthContributorRegistry
contributorRegistry
=
new
DefaultReactiveHealthContributorRegistry
();
private
ReactiveHealthContributorRegistryReactiveHealthIndicatorRegistryAdapter
adapter
=
new
ReactiveHealthContributorRegistryReactiveHealthIndicatorRegistryAdapter
(
this
.
contributorRegistry
);
@Test
void
createWhenContributorRegistryIsNullThrowsException
()
{
assertThatIllegalArgumentException
()
.
isThrownBy
(()
->
new
ReactiveHealthContributorRegistryReactiveHealthIndicatorRegistryAdapter
(
null
))
.
withMessage
(
"ContributorRegistry must not be null"
);
}
@Test
void
registerDelegatesToContributorRegistry
()
{
ReactiveHealthIndicator
healthIndicator
=
mock
(
ReactiveHealthIndicator
.
class
);
this
.
adapter
.
register
(
"test"
,
healthIndicator
);
assertThat
(
this
.
contributorRegistry
.
getContributor
(
"test"
)).
isSameAs
(
healthIndicator
);
}
@Test
void
unregisterDelegatesToContributorRegistry
()
{
ReactiveHealthIndicator
healthIndicator
=
mock
(
ReactiveHealthIndicator
.
class
);
this
.
contributorRegistry
.
registerContributor
(
"test"
,
healthIndicator
);
ReactiveHealthIndicator
unregistered
=
this
.
adapter
.
unregister
(
"test"
);
assertThat
(
unregistered
).
isSameAs
(
healthIndicator
);
assertThat
(
this
.
contributorRegistry
.
getContributor
(
"test"
)).
isNull
();
}
@Test
void
unregisterWhenContributorRegistryResultIsNotHealthIndicatorReturnsNull
()
{
CompositeReactiveHealthContributor
healthContributor
=
mock
(
CompositeReactiveHealthContributor
.
class
);
this
.
contributorRegistry
.
registerContributor
(
"test"
,
healthContributor
);
ReactiveHealthIndicator
unregistered
=
this
.
adapter
.
unregister
(
"test"
);
assertThat
(
unregistered
).
isNull
();
assertThat
(
this
.
contributorRegistry
.
getContributor
(
"test"
)).
isNull
();
}
@Test
void
getDelegatesToContributorRegistry
()
{
ReactiveHealthIndicator
healthIndicator
=
mock
(
ReactiveHealthIndicator
.
class
);
this
.
contributorRegistry
.
registerContributor
(
"test"
,
healthIndicator
);
assertThat
(
this
.
adapter
.
get
(
"test"
)).
isSameAs
(
healthIndicator
);
}
@Test
void
getWhenContributorRegistryResultIsNotHealthIndicatorReturnsNull
()
{
CompositeReactiveHealthContributor
healthContributor
=
mock
(
CompositeReactiveHealthContributor
.
class
);
this
.
contributorRegistry
.
registerContributor
(
"test"
,
healthContributor
);
assertThat
(
this
.
adapter
.
get
(
"test"
)).
isNull
();
}
@Test
void
getAllDelegatesToContributorRegistry
()
{
ReactiveHealthIndicator
healthIndicator
=
mock
(
ReactiveHealthIndicator
.
class
);
this
.
contributorRegistry
.
registerContributor
(
"test"
,
healthIndicator
);
Map
<
String
,
ReactiveHealthIndicator
>
all
=
this
.
adapter
.
getAll
();
assertThat
(
all
).
containsOnly
(
entry
(
"test"
,
healthIndicator
));
}
@Test
void
getAllWhenContributorRegistryContainsNonHealthIndicatorInstancesReturnsFilteredMap
()
{
CompositeReactiveHealthContributor
healthContributor
=
mock
(
CompositeReactiveHealthContributor
.
class
);
this
.
contributorRegistry
.
registerContributor
(
"test1"
,
healthContributor
);
ReactiveHealthIndicator
healthIndicator
=
mock
(
ReactiveHealthIndicator
.
class
);
this
.
contributorRegistry
.
registerContributor
(
"test2"
,
healthIndicator
);
Map
<
String
,
ReactiveHealthIndicator
>
all
=
this
.
adapter
.
getAll
();
assertThat
(
all
).
containsOnly
(
entry
(
"test2"
,
healthIndicator
));
}
}
spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/AbstractHealthAggregator.java
deleted
100644 → 0
View file @
b08da63d
/*
* Copyright 2012-2020 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
*
* https://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
.
actuate
.
health
;
import
java.util.LinkedHashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
/**
* Base {@link HealthAggregator} implementation to allow subclasses to focus on
* aggregating the {@link Status} instances and not deal with contextual details etc.
*
* @author Christian Dupuis
* @author Vedran Pavic
* @since 1.1.0
* @deprecated since 2.2.0 as {@link HealthAggregator} has been deprecated
*/
@Deprecated
public
abstract
class
AbstractHealthAggregator
implements
HealthAggregator
{
@Override
public
final
Health
aggregate
(
Map
<
String
,
Health
>
healths
)
{
List
<
Status
>
statusCandidates
=
healths
.
values
().
stream
().
map
(
Health:
:
getStatus
).
collect
(
Collectors
.
toList
());
Status
status
=
aggregateStatus
(
statusCandidates
);
Map
<
String
,
Object
>
details
=
aggregateDetails
(
healths
);
return
new
Health
.
Builder
(
status
,
details
).
build
();
}
/**
* Return the single 'aggregate' status that should be used from the specified
* candidates.
* @param candidates the candidates
* @return a single status
*/
protected
abstract
Status
aggregateStatus
(
List
<
Status
>
candidates
);
/**
* Return the map of 'aggregate' details that should be used from the specified
* healths.
* @param healths the health instances to aggregate
* @return a map of details
* @since 1.3.1
*/
protected
Map
<
String
,
Object
>
aggregateDetails
(
Map
<
String
,
Health
>
healths
)
{
return
new
LinkedHashMap
<>(
healths
);
}
}
spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/CompositeHealthIndicator.java
deleted
100644 → 0
View file @
b08da63d
/*
* Copyright 2012-2020 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
*
* https://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
.
actuate
.
health
;
import
java.util.LinkedHashMap
;
import
java.util.Map
;
/**
* {@link HealthIndicator} that returns health indications from all registered delegates.
*
* @author Tyler J. Frederick
* @author Phillip Webb
* @author Christian Dupuis
* @since 1.1.0
* @deprecated since 2.2.0 in favor of a {@link CompositeHealthContributor}
*/
@Deprecated
public
class
CompositeHealthIndicator
implements
HealthIndicator
{
private
final
HealthIndicatorRegistry
registry
;
private
final
HealthAggregator
aggregator
;
/**
* Create a new {@link CompositeHealthIndicator} from the specified indicators.
* @param healthAggregator the health aggregator
* @param indicators a map of {@link HealthIndicator HealthIndicators} with the key
* being used as an indicator name.
*/
public
CompositeHealthIndicator
(
HealthAggregator
healthAggregator
,
Map
<
String
,
HealthIndicator
>
indicators
)
{
this
(
healthAggregator
,
new
DefaultHealthIndicatorRegistry
(
indicators
));
}
/**
* Create a new {@link CompositeHealthIndicator} from the indicators in the given
* {@code registry}.
* @param healthAggregator the health aggregator
* @param registry the registry of {@link HealthIndicator HealthIndicators}.
*/
public
CompositeHealthIndicator
(
HealthAggregator
healthAggregator
,
HealthIndicatorRegistry
registry
)
{
this
.
aggregator
=
healthAggregator
;
this
.
registry
=
registry
;
}
/**
* Return the {@link HealthIndicatorRegistry} of this instance.
* @return the registry of nested {@link HealthIndicator health indicators}
* @since 2.1.0
*/
public
HealthIndicatorRegistry
getRegistry
()
{
return
this
.
registry
;
}
@Override
public
Health
health
()
{
Map
<
String
,
Health
>
healths
=
new
LinkedHashMap
<>();
for
(
Map
.
Entry
<
String
,
HealthIndicator
>
entry
:
this
.
registry
.
getAll
().
entrySet
())
{
healths
.
put
(
entry
.
getKey
(),
entry
.
getValue
().
health
());
}
return
this
.
aggregator
.
aggregate
(
healths
);
}
}
spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/CompositeReactiveHealthIndicator.java
deleted
100644 → 0
View file @
b08da63d
/*
* Copyright 2012-2020 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
*
* https://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
.
actuate
.
health
;
import
java.time.Duration
;
import
java.util.function.Function
;
import
reactor.core.publisher.Flux
;
import
reactor.core.publisher.Mono
;
import
reactor.util.function.Tuple2
;
/**
* {@link ReactiveHealthIndicator} that returns health indications from all registered
* delegates. Provides an alternative {@link Health} for a delegate that reaches a
* configurable timeout.
*
* @author Stephane Nicoll
* @since 2.0.0
* @deprecated since 2.2.0 in favor of a {@link CompositeReactiveHealthContributor}
*/
@Deprecated
public
class
CompositeReactiveHealthIndicator
implements
ReactiveHealthIndicator
{
private
final
ReactiveHealthIndicatorRegistry
registry
;
private
final
HealthAggregator
healthAggregator
;
private
Long
timeout
;
private
Health
timeoutHealth
;
private
final
Function
<
Mono
<
Health
>,
Mono
<
Health
>>
timeoutCompose
;
/**
* Create a new {@link CompositeReactiveHealthIndicator} from the indicators in the
* given {@code registry}.
* @param healthAggregator the health aggregator
* @param registry the registry of {@link ReactiveHealthIndicator HealthIndicators}.
*/
public
CompositeReactiveHealthIndicator
(
HealthAggregator
healthAggregator
,
ReactiveHealthIndicatorRegistry
registry
)
{
this
.
registry
=
registry
;
this
.
healthAggregator
=
healthAggregator
;
this
.
timeoutCompose
=
(
mono
)
->
(
this
.
timeout
!=
null
)
?
mono
.
timeout
(
Duration
.
ofMillis
(
this
.
timeout
),
Mono
.
just
(
this
.
timeoutHealth
))
:
mono
;
}
/**
* Specify an alternative timeout {@link Health} if a {@link HealthIndicator} failed
* to reply after specified {@code timeout}.
* @param timeout number of milliseconds to wait before using the
* {@code timeoutHealth}
* @param timeoutHealth the {@link Health} to use if an health indicator reached the
* {@code timeout}
* @return this instance
*/
public
CompositeReactiveHealthIndicator
timeoutStrategy
(
long
timeout
,
Health
timeoutHealth
)
{
this
.
timeout
=
timeout
;
this
.
timeoutHealth
=
(
timeoutHealth
!=
null
)
?
timeoutHealth
:
Health
.
unknown
().
build
();
return
this
;
}
ReactiveHealthIndicatorRegistry
getRegistry
()
{
return
this
.
registry
;
}
@Override
public
Mono
<
Health
>
health
()
{
return
Flux
.
fromIterable
(
this
.
registry
.
getAll
().
entrySet
())
.
flatMap
((
entry
)
->
Mono
.
zip
(
Mono
.
just
(
entry
.
getKey
()),
entry
.
getValue
().
health
().
transformDeferred
(
this
.
timeoutCompose
)))
.
collectMap
(
Tuple2:
:
getT1
,
Tuple2:
:
getT2
).
map
(
this
.
healthAggregator
::
aggregate
);
}
}
spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/DefaultHealthIndicatorRegistry.java
deleted
100644 → 0
View file @
b08da63d
/*
* Copyright 2012-2020 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
*
* https://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
.
actuate
.
health
;
import
java.util.Collections
;
import
java.util.LinkedHashMap
;
import
java.util.Map
;
import
org.springframework.util.Assert
;
/**
* Default implementation of {@link HealthIndicatorRegistry}.
*
* @author Vedran Pavic
* @author Stephane Nicoll
* @since 2.1.0
* @deprecated since 2.2.0 in favor of {@link DefaultContributorRegistry}
*/
@Deprecated
public
class
DefaultHealthIndicatorRegistry
implements
HealthIndicatorRegistry
{
private
final
Object
monitor
=
new
Object
();
private
final
Map
<
String
,
HealthIndicator
>
healthIndicators
;
/**
* Create a new {@link DefaultHealthIndicatorRegistry}.
*/
public
DefaultHealthIndicatorRegistry
()
{
this
(
new
LinkedHashMap
<>());
}
/**
* Create a new {@link DefaultHealthIndicatorRegistry} from the specified indicators.
* @param healthIndicators a map of {@link HealthIndicator}s with the key being used
* as an indicator name.
*/
public
DefaultHealthIndicatorRegistry
(
Map
<
String
,
HealthIndicator
>
healthIndicators
)
{
Assert
.
notNull
(
healthIndicators
,
"HealthIndicators must not be null"
);
this
.
healthIndicators
=
new
LinkedHashMap
<>(
healthIndicators
);
}
@Override
public
void
register
(
String
name
,
HealthIndicator
healthIndicator
)
{
Assert
.
notNull
(
healthIndicator
,
"HealthIndicator must not be null"
);
Assert
.
notNull
(
name
,
"Name must not be null"
);
synchronized
(
this
.
monitor
)
{
HealthIndicator
existing
=
this
.
healthIndicators
.
putIfAbsent
(
name
,
healthIndicator
);
if
(
existing
!=
null
)
{
throw
new
IllegalStateException
(
"HealthIndicator with name '"
+
name
+
"' already registered"
);
}
}
}
@Override
public
HealthIndicator
unregister
(
String
name
)
{
Assert
.
notNull
(
name
,
"Name must not be null"
);
synchronized
(
this
.
monitor
)
{
return
this
.
healthIndicators
.
remove
(
name
);
}
}
@Override
public
HealthIndicator
get
(
String
name
)
{
Assert
.
notNull
(
name
,
"Name must not be null"
);
synchronized
(
this
.
monitor
)
{
return
this
.
healthIndicators
.
get
(
name
);
}
}
@Override
public
Map
<
String
,
HealthIndicator
>
getAll
()
{
synchronized
(
this
.
monitor
)
{
return
Collections
.
unmodifiableMap
(
new
LinkedHashMap
<>(
this
.
healthIndicators
));
}
}
}
spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/DefaultReactiveHealthIndicatorRegistry.java
deleted
100644 → 0
View file @
b08da63d
/*
* Copyright 2012-2020 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
*
* https://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
.
actuate
.
health
;
import
java.util.Collections
;
import
java.util.LinkedHashMap
;
import
java.util.Map
;
import
org.springframework.util.Assert
;
/**
* Default implementation of {@link ReactiveHealthIndicatorRegistry}.
*
* @author Vedran Pavic
* @author Stephane Nicoll
* @since 2.1.0
* @deprecated since 2.2.0 in favor of {@link DefaultContributorRegistry}
*/
@Deprecated
public
class
DefaultReactiveHealthIndicatorRegistry
implements
ReactiveHealthIndicatorRegistry
{
private
final
Object
monitor
=
new
Object
();
private
final
Map
<
String
,
ReactiveHealthIndicator
>
healthIndicators
;
/**
* Create a new {@link DefaultReactiveHealthIndicatorRegistry}.
*/
public
DefaultReactiveHealthIndicatorRegistry
()
{
this
(
new
LinkedHashMap
<>());
}
/**
* Create a new {@link DefaultReactiveHealthIndicatorRegistry} from the specified
* indicators.
* @param healthIndicators a map of {@link HealthIndicator}s with the key being used
* as an indicator name.
*/
public
DefaultReactiveHealthIndicatorRegistry
(
Map
<
String
,
ReactiveHealthIndicator
>
healthIndicators
)
{
Assert
.
notNull
(
healthIndicators
,
"HealthIndicators must not be null"
);
this
.
healthIndicators
=
new
LinkedHashMap
<>(
healthIndicators
);
}
@Override
public
void
register
(
String
name
,
ReactiveHealthIndicator
healthIndicator
)
{
Assert
.
notNull
(
healthIndicator
,
"HealthIndicator must not be null"
);
Assert
.
notNull
(
name
,
"Name must not be null"
);
synchronized
(
this
.
monitor
)
{
ReactiveHealthIndicator
existing
=
this
.
healthIndicators
.
putIfAbsent
(
name
,
healthIndicator
);
if
(
existing
!=
null
)
{
throw
new
IllegalStateException
(
"HealthIndicator with name '"
+
name
+
"' already registered"
);
}
}
}
@Override
public
ReactiveHealthIndicator
unregister
(
String
name
)
{
Assert
.
notNull
(
name
,
"Name must not be null"
);
synchronized
(
this
.
monitor
)
{
return
this
.
healthIndicators
.
remove
(
name
);
}
}
@Override
public
ReactiveHealthIndicator
get
(
String
name
)
{
Assert
.
notNull
(
name
,
"Name must not be null"
);
synchronized
(
this
.
monitor
)
{
return
this
.
healthIndicators
.
get
(
name
);
}
}
@Override
public
Map
<
String
,
ReactiveHealthIndicator
>
getAll
()
{
synchronized
(
this
.
monitor
)
{
return
Collections
.
unmodifiableMap
(
new
LinkedHashMap
<>(
this
.
healthIndicators
));
}
}
}
spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/HealthAggregator.java
deleted
100644 → 0
View file @
b08da63d
/*
* Copyright 2012-2020 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
*
* https://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
.
actuate
.
health
;
import
java.util.Map
;
/**
* Strategy interface used to aggregate {@link Health} instances into a final one.
* <p>
* This is especially useful to combine subsystem states expressed through
* {@link Health#getStatus()} into one state for the entire system. The default
* implementation {@link OrderedHealthAggregator} sorts {@link Status} instances based on
* a priority list.
* <p>
* It is possible to add more complex {@link Status} types to the system. In that case
* either the {@link OrderedHealthAggregator} needs to be properly configured or users
* need to register a custom {@link HealthAggregator} as bean.
*
* @author Christian Dupuis
* @since 1.1.0
* @deprecated since 2.2.0 in favor of {@link StatusAggregator}
*/
@FunctionalInterface
@Deprecated
public
interface
HealthAggregator
{
/**
* Aggregate several given {@link Health} instances into one.
* @param healths the health instances to aggregate
* @return the aggregated health
*/
Health
aggregate
(
Map
<
String
,
Health
>
healths
);
}
spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/HealthIndicatorNameFactory.java
deleted
100644 → 0
View file @
b08da63d
/*
* Copyright 2012-2020 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
*
* https://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
.
actuate
.
health
;
/**
* Generate a sensible health indicator name based on its bean name.
*
* @author Stephane Nicoll
* @author Phillip Webb
* @since 2.0.0
* @deprecated since 2.2.0 in favor of {@link HealthContributorNameFactory}
*/
@Deprecated
public
class
HealthIndicatorNameFactory
extends
HealthContributorNameFactory
{
}
spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/HealthIndicatorReactiveAdapter.java
View file @
35d41e4a
...
...
@@ -26,17 +26,12 @@ import org.springframework.util.Assert;
* safely invoked in a reactive environment.
*
* @author Stephane Nicoll
* @since 2.0.0
* @deprecated since 2.2.0 in favor of
* {@link ReactiveHealthContributor#adapt(HealthContributor)}
* @see ReactiveHealthContributor#adapt(HealthContributor)
*/
@Deprecated
public
class
HealthIndicatorReactiveAdapter
implements
ReactiveHealthIndicator
{
class
HealthIndicatorReactiveAdapter
implements
ReactiveHealthIndicator
{
private
final
HealthIndicator
delegate
;
public
HealthIndicatorReactiveAdapter
(
HealthIndicator
delegate
)
{
HealthIndicatorReactiveAdapter
(
HealthIndicator
delegate
)
{
Assert
.
notNull
(
delegate
,
"Delegate must not be null"
);
this
.
delegate
=
delegate
;
}
...
...
spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/HealthIndicatorRegistry.java
deleted
100644 → 0
View file @
b08da63d
/*
* Copyright 2012-2020 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
*
* https://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
.
actuate
.
health
;
import
java.util.Map
;
/**
* A mutable registry of {@link HealthIndicator HealthIndicators}.
* <p>
* Implementations <strong>must</strong> be thread-safe.
*
* @author Andy Wilkinson
* @author Vedran Pavic
* @author Stephane Nicoll
* @since 2.1.0
* @see HealthEndpoint
* @deprecated since 2.2.0 in favor of a {@link HealthContributorRegistry}
*/
@Deprecated
public
interface
HealthIndicatorRegistry
{
/**
* Registers the given {@link HealthIndicator}, associating it with the given
* {@code name}.
* @param name the name of the indicator
* @param healthIndicator the indicator
* @throws IllegalStateException if the indicator cannot be registered with the given
* {@code name}.
*/
void
register
(
String
name
,
HealthIndicator
healthIndicator
);
/**
* Unregisters the {@link HealthIndicator} previously registered with the given
* {@code name}.
* @param name the name of the indicator
* @return the unregistered indicator, or {@code null} if no indicator was found in
* the registry for the given {@code name}.
*/
HealthIndicator
unregister
(
String
name
);
/**
* Returns the {@link HealthIndicator} registered with the given {@code name}.
* @param name the name of the indicator
* @return the health indicator, or {@code null} if no indicator was registered with
* the given {@code name}.
*/
HealthIndicator
get
(
String
name
);
/**
* Returns a snapshot of the registered health indicators and their names. The
* contents of the map do not reflect subsequent changes to the registry.
* @return the snapshot of registered health indicators
*/
Map
<
String
,
HealthIndicator
>
getAll
();
}
spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/HealthIndicatorRegistryFactory.java
deleted
100644 → 0
View file @
b08da63d
/*
* Copyright 2012-2020 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
*
* https://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
.
actuate
.
health
;
import
java.util.Map
;
import
java.util.function.Function
;
import
org.springframework.util.Assert
;
/**
* Factory to create a {@link HealthIndicatorRegistry}.
*
* @author Stephane Nicoll
* @since 2.1.0
* @deprecated since 2.2.0 in favor of {@link DefaultHealthIndicatorRegistry}
*/
@Deprecated
public
class
HealthIndicatorRegistryFactory
{
private
final
Function
<
String
,
String
>
healthIndicatorNameFactory
;
public
HealthIndicatorRegistryFactory
(
Function
<
String
,
String
>
healthIndicatorNameFactory
)
{
this
.
healthIndicatorNameFactory
=
healthIndicatorNameFactory
;
}
public
HealthIndicatorRegistryFactory
()
{
this
(
new
HealthIndicatorNameFactory
());
}
/**
* Create a {@link HealthIndicatorRegistry} based on the specified health indicators.
* @param healthIndicators the {@link HealthIndicator} instances mapped by name
* @return a {@link HealthIndicator} that delegates to the specified
* {@code healthIndicators}.
*/
public
HealthIndicatorRegistry
createHealthIndicatorRegistry
(
Map
<
String
,
HealthIndicator
>
healthIndicators
)
{
Assert
.
notNull
(
healthIndicators
,
"HealthIndicators must not be null"
);
return
initialize
(
new
DefaultHealthIndicatorRegistry
(),
healthIndicators
);
}
protected
<
T
extends
HealthIndicatorRegistry
>
T
initialize
(
T
registry
,
Map
<
String
,
HealthIndicator
>
healthIndicators
)
{
for
(
Map
.
Entry
<
String
,
HealthIndicator
>
entry
:
healthIndicators
.
entrySet
())
{
String
name
=
this
.
healthIndicatorNameFactory
.
apply
(
entry
.
getKey
());
registry
.
register
(
name
,
entry
.
getValue
());
}
return
registry
;
}
}
spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/OrderedHealthAggregator.java
deleted
100644 → 0
View file @
b08da63d
/*
* Copyright 2012-2020 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
*
* https://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
.
actuate
.
health
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.Comparator
;
import
java.util.List
;
import
org.springframework.util.Assert
;
/**
* Default {@link HealthAggregator} implementation that aggregates {@link Health}
* instances and determines the final system state based on a simple ordered list.
* <p>
* If a different order is required or a new {@link Status} type will be used, the order
* can be set by calling {@link #setStatusOrder(List)}.
*
* @author Christian Dupuis
* @since 1.1.0
* @deprecated since 2.2.0 in favor of {@link SimpleStatusAggregator}
*/
@Deprecated
public
class
OrderedHealthAggregator
extends
AbstractHealthAggregator
{
private
List
<
String
>
statusOrder
;
/**
* Create a new {@link OrderedHealthAggregator} instance.
*/
public
OrderedHealthAggregator
()
{
setStatusOrder
(
Status
.
DOWN
,
Status
.
OUT_OF_SERVICE
,
Status
.
UP
,
Status
.
UNKNOWN
);
}
/**
* Set the ordering of the status.
* @param statusOrder an ordered list of the status
*/
public
void
setStatusOrder
(
Status
...
statusOrder
)
{
String
[]
order
=
new
String
[
statusOrder
.
length
];
for
(
int
i
=
0
;
i
<
statusOrder
.
length
;
i
++)
{
order
[
i
]
=
statusOrder
[
i
].
getCode
();
}
setStatusOrder
(
Arrays
.
asList
(
order
));
}
/**
* Set the ordering of the status.
* @param statusOrder an ordered list of the status codes
*/
public
void
setStatusOrder
(
List
<
String
>
statusOrder
)
{
Assert
.
notNull
(
statusOrder
,
"StatusOrder must not be null"
);
this
.
statusOrder
=
statusOrder
;
}
@Override
protected
Status
aggregateStatus
(
List
<
Status
>
candidates
)
{
// Only sort those status instances that we know about
List
<
Status
>
filteredCandidates
=
new
ArrayList
<>();
for
(
Status
candidate
:
candidates
)
{
if
(
this
.
statusOrder
.
contains
(
candidate
.
getCode
()))
{
filteredCandidates
.
add
(
candidate
);
}
}
// If no status is given return UNKNOWN
if
(
filteredCandidates
.
isEmpty
())
{
return
Status
.
UNKNOWN
;
}
// Sort given Status instances by configured order
filteredCandidates
.
sort
(
new
StatusComparator
(
this
.
statusOrder
));
return
filteredCandidates
.
get
(
0
);
}
/**
* {@link Comparator} used to order {@link Status}.
*/
private
static
class
StatusComparator
implements
Comparator
<
Status
>
{
private
final
List
<
String
>
statusOrder
;
StatusComparator
(
List
<
String
>
statusOrder
)
{
this
.
statusOrder
=
statusOrder
;
}
@Override
public
int
compare
(
Status
s1
,
Status
s2
)
{
int
i1
=
this
.
statusOrder
.
indexOf
(
s1
.
getCode
());
int
i2
=
this
.
statusOrder
.
indexOf
(
s2
.
getCode
());
return
(
i1
<
i2
)
?
-
1
:
(
i1
!=
i2
)
?
1
:
s1
.
getCode
().
compareTo
(
s2
.
getCode
());
}
}
}
spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/ReactiveHealthContributor.java
View file @
35d41e4a
...
...
@@ -31,7 +31,6 @@ import org.springframework.util.Assert;
*/
public
interface
ReactiveHealthContributor
{
@SuppressWarnings
(
"deprecation"
)
static
ReactiveHealthContributor
adapt
(
HealthContributor
healthContributor
)
{
Assert
.
notNull
(
healthContributor
,
"HealthContributor must not be null"
);
if
(
healthContributor
instanceof
HealthIndicator
)
{
...
...
spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/ReactiveHealthIndicatorRegistry.java
deleted
100644 → 0
View file @
b08da63d
/*
* Copyright 2012-2020 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
*
* https://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
.
actuate
.
health
;
import
java.util.Map
;
/**
* A registry of {@link ReactiveHealthIndicator ReactiveHealthIndicators}.
* <p>
* Implementations <strong>must</strong> be thread-safe.
*
* @author Andy Wilkinson
* @author Vedran Pavic
* @author Stephane Nicoll
* @since 2.1.0
* @see HealthIndicatorRegistry
* @deprecated since 2.2.0 in favor of a {@link ReactiveHealthContributorRegistry}
*/
@Deprecated
public
interface
ReactiveHealthIndicatorRegistry
{
/**
* Registers the given {@link ReactiveHealthIndicator}, associating it with the given
* {@code name}.
* @param name the name of the indicator
* @param healthIndicator the indicator
* @throws IllegalStateException if an indicator with the given {@code name} is
* already registered.
*/
void
register
(
String
name
,
ReactiveHealthIndicator
healthIndicator
);
/**
* Unregisters the {@link ReactiveHealthIndicator} previously registered with the
* given {@code name}.
* @param name the name of the indicator
* @return the unregistered indicator, or {@code null} if no indicator was found in
* the registry for the given {@code name}.
*/
ReactiveHealthIndicator
unregister
(
String
name
);
/**
* Returns the {@link ReactiveHealthIndicator} registered with the given {@code name}.
* @param name the name of the indicator
* @return the health indicator, or {@code null} if no indicator was registered with
* the given {@code name}.
*/
ReactiveHealthIndicator
get
(
String
name
);
/**
* Returns a snapshot of the registered health indicators and their names. The
* contents of the map do not reflect subsequent changes to the registry.
* @return the snapshot of registered health indicators
*/
Map
<
String
,
ReactiveHealthIndicator
>
getAll
();
}
spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/ReactiveHealthIndicatorRegistryFactory.java
deleted
100644 → 0
View file @
b08da63d
/*
* Copyright 2012-2020 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
*
* https://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
.
actuate
.
health
;
import
java.util.LinkedHashMap
;
import
java.util.Map
;
import
java.util.function.Function
;
import
org.springframework.util.Assert
;
import
org.springframework.util.ObjectUtils
;
/**
* Factory to create a {@link HealthIndicatorRegistry}.
*
* @author Stephane Nicoll
* @since 2.1.0
* @deprecated since 2.2.0 in favor of {@link DefaultReactiveHealthIndicatorRegistry}
*/
@Deprecated
public
class
ReactiveHealthIndicatorRegistryFactory
{
private
final
Function
<
String
,
String
>
healthIndicatorNameFactory
;
public
ReactiveHealthIndicatorRegistryFactory
(
Function
<
String
,
String
>
healthIndicatorNameFactory
)
{
this
.
healthIndicatorNameFactory
=
healthIndicatorNameFactory
;
}
public
ReactiveHealthIndicatorRegistryFactory
()
{
this
(
new
HealthIndicatorNameFactory
());
}
/**
* Create a {@link ReactiveHealthIndicatorRegistry} based on the specified health
* indicators. Each {@link HealthIndicator} are wrapped to a
* {@link HealthIndicatorReactiveAdapter}. If two instances share the same name, the
* reactive variant takes precedence.
* @param reactiveHealthIndicators the {@link ReactiveHealthIndicator} instances
* mapped by name
* @param healthIndicators the {@link HealthIndicator} instances mapped by name if
* any.
* @return a {@link ReactiveHealthIndicator} that delegates to the specified
* {@code reactiveHealthIndicators}.
*/
public
ReactiveHealthIndicatorRegistry
createReactiveHealthIndicatorRegistry
(
Map
<
String
,
ReactiveHealthIndicator
>
reactiveHealthIndicators
,
Map
<
String
,
HealthIndicator
>
healthIndicators
)
{
Assert
.
notNull
(
reactiveHealthIndicators
,
"ReactiveHealthIndicators must not be null"
);
return
initialize
(
new
DefaultReactiveHealthIndicatorRegistry
(),
reactiveHealthIndicators
,
healthIndicators
);
}
protected
<
T
extends
ReactiveHealthIndicatorRegistry
>
T
initialize
(
T
registry
,
Map
<
String
,
ReactiveHealthIndicator
>
reactiveHealthIndicators
,
Map
<
String
,
HealthIndicator
>
healthIndicators
)
{
merge
(
reactiveHealthIndicators
,
healthIndicators
).
forEach
((
beanName
,
indicator
)
->
{
String
name
=
this
.
healthIndicatorNameFactory
.
apply
(
beanName
);
registry
.
register
(
name
,
indicator
);
});
return
registry
;
}
private
Map
<
String
,
ReactiveHealthIndicator
>
merge
(
Map
<
String
,
ReactiveHealthIndicator
>
reactiveHealthIndicators
,
Map
<
String
,
HealthIndicator
>
healthIndicators
)
{
if
(
ObjectUtils
.
isEmpty
(
healthIndicators
))
{
return
reactiveHealthIndicators
;
}
Map
<
String
,
ReactiveHealthIndicator
>
allIndicators
=
new
LinkedHashMap
<>(
reactiveHealthIndicators
);
healthIndicators
.
forEach
((
beanName
,
indicator
)
->
{
String
name
=
this
.
healthIndicatorNameFactory
.
apply
(
beanName
);
allIndicators
.
computeIfAbsent
(
name
,
(
n
)
->
new
HealthIndicatorReactiveAdapter
(
indicator
));
});
return
allIndicators
;
}
}
spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/CompositeHealthIndicatorTests.java
deleted
100644 → 0
View file @
b08da63d
/*
* Copyright 2012-2020 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
*
* https://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
.
actuate
.
health
;
import
java.util.Collections
;
import
java.util.HashMap
;
import
java.util.LinkedHashMap
;
import
java.util.Map
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
org.junit.jupiter.api.BeforeEach
;
import
org.junit.jupiter.api.Test
;
import
org.mockito.Mock
;
import
org.mockito.MockitoAnnotations
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
import
static
org
.
mockito
.
BDDMockito
.
given
;
/**
* Tests for {@link CompositeHealthIndicator}
*
* @author Tyler J. Frederick
* @author Phillip Webb
* @author Christian Dupuis
*/
@Deprecated
class
CompositeHealthIndicatorTests
{
private
HealthAggregator
healthAggregator
;
@Mock
private
HealthIndicator
one
;
@Mock
private
HealthIndicator
two
;
@BeforeEach
void
setup
()
{
MockitoAnnotations
.
initMocks
(
this
);
given
(
this
.
one
.
health
()).
willReturn
(
new
Health
.
Builder
().
unknown
().
withDetail
(
"1"
,
"1"
).
build
());
given
(
this
.
two
.
health
()).
willReturn
(
new
Health
.
Builder
().
unknown
().
withDetail
(
"2"
,
"2"
).
build
());
this
.
healthAggregator
=
new
OrderedHealthAggregator
();
}
@Test
void
createWithIndicators
()
{
Map
<
String
,
HealthIndicator
>
indicators
=
new
HashMap
<>();
indicators
.
put
(
"one"
,
this
.
one
);
indicators
.
put
(
"two"
,
this
.
two
);
CompositeHealthIndicator
composite
=
new
CompositeHealthIndicator
(
this
.
healthAggregator
,
indicators
);
Health
result
=
composite
.
health
();
assertThat
(
result
.
getDetails
()).
hasSize
(
2
);
assertThat
(
result
.
getDetails
()).
containsEntry
(
"one"
,
new
Health
.
Builder
().
unknown
().
withDetail
(
"1"
,
"1"
).
build
());
assertThat
(
result
.
getDetails
()).
containsEntry
(
"two"
,
new
Health
.
Builder
().
unknown
().
withDetail
(
"2"
,
"2"
).
build
());
}
@Test
void
testSerialization
()
throws
Exception
{
Map
<
String
,
HealthIndicator
>
indicators
=
new
LinkedHashMap
<>();
indicators
.
put
(
"db1"
,
this
.
one
);
indicators
.
put
(
"db2"
,
this
.
two
);
CompositeHealthIndicator
innerComposite
=
new
CompositeHealthIndicator
(
this
.
healthAggregator
,
indicators
);
CompositeHealthIndicator
composite
=
new
CompositeHealthIndicator
(
this
.
healthAggregator
,
Collections
.
singletonMap
(
"db"
,
innerComposite
));
Health
result
=
composite
.
health
();
ObjectMapper
mapper
=
new
ObjectMapper
();
assertThat
(
mapper
.
writeValueAsString
(
result
))
.
isEqualTo
(
"{\"status\":\"UNKNOWN\",\"details\":{\"db\":{\"status\":\"UNKNOWN\""
+
",\"details\":{\"db1\":{\"status\":\"UNKNOWN\",\"details\""
+
":{\"1\":\"1\"}},\"db2\":{\"status\":\"UNKNOWN\",\"details\":{\"2\":\"2\"}}}}}}"
);
}
}
spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/CompositeReactiveHealthIndicatorTests.java
deleted
100644 → 0
View file @
b08da63d
/*
* Copyright 2012-2020 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
*
* https://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
.
actuate
.
health
;
import
java.time.Duration
;
import
java.util.Collections
;
import
java.util.HashMap
;
import
java.util.Map
;
import
org.junit.jupiter.api.Test
;
import
reactor.core.publisher.Mono
;
import
reactor.test.StepVerifier
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
/**
* Tests for {@link CompositeReactiveHealthIndicator}.
*
* @author Stephane Nicoll
*/
@Deprecated
class
CompositeReactiveHealthIndicatorTests
{
private
static
final
Health
UNKNOWN_HEALTH
=
Health
.
unknown
().
withDetail
(
"detail"
,
"value"
).
build
();
private
static
final
Health
HEALTHY
=
Health
.
up
().
build
();
private
OrderedHealthAggregator
healthAggregator
=
new
OrderedHealthAggregator
();
@Test
void
singleIndicator
()
{
CompositeReactiveHealthIndicator
indicator
=
new
CompositeReactiveHealthIndicator
(
this
.
healthAggregator
,
new
DefaultReactiveHealthIndicatorRegistry
(
Collections
.
singletonMap
(
"test"
,
()
->
Mono
.
just
(
HEALTHY
))));
StepVerifier
.
create
(
indicator
.
health
()).
consumeNextWith
((
h
)
->
{
assertThat
(
h
.
getStatus
()).
isEqualTo
(
Status
.
UP
);
assertThat
(
h
.
getDetails
()).
containsOnlyKeys
(
"test"
);
assertThat
(
h
.
getDetails
().
get
(
"test"
)).
isEqualTo
(
HEALTHY
);
}).
verifyComplete
();
}
@Test
void
longHealth
()
{
Map
<
String
,
ReactiveHealthIndicator
>
indicators
=
new
HashMap
<>();
for
(
int
i
=
0
;
i
<
50
;
i
++)
{
indicators
.
put
(
"test"
+
i
,
new
TimeoutHealth
(
10000
,
Status
.
UP
));
}
CompositeReactiveHealthIndicator
indicator
=
new
CompositeReactiveHealthIndicator
(
this
.
healthAggregator
,
new
DefaultReactiveHealthIndicatorRegistry
(
indicators
));
StepVerifier
.
withVirtualTime
(
indicator:
:
health
).
expectSubscription
().
thenAwait
(
Duration
.
ofMillis
(
10000
))
.
consumeNextWith
((
h
)
->
{
assertThat
(
h
.
getStatus
()).
isEqualTo
(
Status
.
UP
);
assertThat
(
h
.
getDetails
()).
hasSize
(
50
);
}).
verifyComplete
();
}
@Test
void
timeoutReachedUsesFallback
()
{
Map
<
String
,
ReactiveHealthIndicator
>
indicators
=
new
HashMap
<>();
indicators
.
put
(
"slow"
,
new
TimeoutHealth
(
10000
,
Status
.
UP
));
indicators
.
put
(
"fast"
,
new
TimeoutHealth
(
250
,
Status
.
UP
));
CompositeReactiveHealthIndicator
indicator
=
new
CompositeReactiveHealthIndicator
(
this
.
healthAggregator
,
new
DefaultReactiveHealthIndicatorRegistry
(
indicators
)).
timeoutStrategy
(
1000
,
UNKNOWN_HEALTH
);
StepVerifier
.
create
(
indicator
.
health
()).
consumeNextWith
((
h
)
->
{
assertThat
(
h
.
getStatus
()).
isEqualTo
(
Status
.
UP
);
assertThat
(
h
.
getDetails
()).
containsOnlyKeys
(
"slow"
,
"fast"
);
assertThat
(
h
.
getDetails
().
get
(
"slow"
)).
isEqualTo
(
UNKNOWN_HEALTH
);
assertThat
(
h
.
getDetails
().
get
(
"fast"
)).
isEqualTo
(
HEALTHY
);
}).
verifyComplete
();
}
@Test
void
timeoutNotReached
()
{
Map
<
String
,
ReactiveHealthIndicator
>
indicators
=
new
HashMap
<>();
indicators
.
put
(
"slow"
,
new
TimeoutHealth
(
10000
,
Status
.
UP
));
indicators
.
put
(
"fast"
,
new
TimeoutHealth
(
10
,
Status
.
UP
));
CompositeReactiveHealthIndicator
indicator
=
new
CompositeReactiveHealthIndicator
(
this
.
healthAggregator
,
new
DefaultReactiveHealthIndicatorRegistry
(
indicators
)).
timeoutStrategy
(
20000
,
null
);
StepVerifier
.
withVirtualTime
(
indicator:
:
health
).
expectSubscription
().
thenAwait
(
Duration
.
ofMillis
(
10000
))
.
consumeNextWith
((
h
)
->
{
assertThat
(
h
.
getStatus
()).
isEqualTo
(
Status
.
UP
);
assertThat
(
h
.
getDetails
()).
containsOnlyKeys
(
"slow"
,
"fast"
);
assertThat
(
h
.
getDetails
().
get
(
"slow"
)).
isEqualTo
(
HEALTHY
);
assertThat
(
h
.
getDetails
().
get
(
"fast"
)).
isEqualTo
(
HEALTHY
);
}).
verifyComplete
();
}
static
class
TimeoutHealth
implements
ReactiveHealthIndicator
{
private
final
long
timeout
;
private
final
Status
status
;
TimeoutHealth
(
long
timeout
,
Status
status
)
{
this
.
timeout
=
timeout
;
this
.
status
=
status
;
}
@Override
public
Mono
<
Health
>
health
()
{
return
Mono
.
delay
(
Duration
.
ofMillis
(
this
.
timeout
)).
map
((
l
)
->
Health
.
status
(
this
.
status
).
build
());
}
}
}
spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/DefaultHealthIndicatorRegistryTests.java
deleted
100644 → 0
View file @
b08da63d
/*
* Copyright 2012-2020 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
*
* https://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
.
actuate
.
health
;
import
java.util.Map
;
import
org.junit.jupiter.api.BeforeEach
;
import
org.junit.jupiter.api.Test
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThatExceptionOfType
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThatIllegalStateException
;
import
static
org
.
mockito
.
BDDMockito
.
given
;
import
static
org
.
mockito
.
Mockito
.
mock
;
/**
* Tests for {@link DefaultHealthIndicatorRegistry}.
*
* @author Vedran Pavic
* @author Stephane Nicoll
*/
@Deprecated
class
DefaultHealthIndicatorRegistryTests
{
private
HealthIndicator
one
=
mock
(
HealthIndicator
.
class
);
private
HealthIndicator
two
=
mock
(
HealthIndicator
.
class
);
private
DefaultHealthIndicatorRegistry
registry
;
@BeforeEach
void
setUp
()
{
given
(
this
.
one
.
health
()).
willReturn
(
new
Health
.
Builder
().
unknown
().
withDetail
(
"1"
,
"1"
).
build
());
given
(
this
.
two
.
health
()).
willReturn
(
new
Health
.
Builder
().
unknown
().
withDetail
(
"2"
,
"2"
).
build
());
this
.
registry
=
new
DefaultHealthIndicatorRegistry
();
}
@Test
void
register
()
{
this
.
registry
.
register
(
"one"
,
this
.
one
);
this
.
registry
.
register
(
"two"
,
this
.
two
);
assertThat
(
this
.
registry
.
getAll
()).
hasSize
(
2
);
assertThat
(
this
.
registry
.
get
(
"one"
)).
isSameAs
(
this
.
one
);
assertThat
(
this
.
registry
.
get
(
"two"
)).
isSameAs
(
this
.
two
);
}
@Test
void
registerAlreadyUsedName
()
{
this
.
registry
.
register
(
"one"
,
this
.
one
);
assertThatIllegalStateException
().
isThrownBy
(()
->
this
.
registry
.
register
(
"one"
,
this
.
two
))
.
withMessageContaining
(
"HealthIndicator with name 'one' already registered"
);
}
@Test
void
unregister
()
{
this
.
registry
.
register
(
"one"
,
this
.
one
);
this
.
registry
.
register
(
"two"
,
this
.
two
);
assertThat
(
this
.
registry
.
getAll
()).
hasSize
(
2
);
HealthIndicator
two
=
this
.
registry
.
unregister
(
"two"
);
assertThat
(
two
).
isSameAs
(
this
.
two
);
assertThat
(
this
.
registry
.
getAll
()).
hasSize
(
1
);
}
@Test
void
unregisterUnknown
()
{
this
.
registry
.
register
(
"one"
,
this
.
one
);
assertThat
(
this
.
registry
.
getAll
()).
hasSize
(
1
);
HealthIndicator
two
=
this
.
registry
.
unregister
(
"two"
);
assertThat
(
two
).
isNull
();
assertThat
(
this
.
registry
.
getAll
()).
hasSize
(
1
);
}
@Test
void
getAllIsASnapshot
()
{
this
.
registry
.
register
(
"one"
,
this
.
one
);
Map
<
String
,
HealthIndicator
>
snapshot
=
this
.
registry
.
getAll
();
assertThat
(
snapshot
).
containsOnlyKeys
(
"one"
);
this
.
registry
.
register
(
"two"
,
this
.
two
);
assertThat
(
snapshot
).
containsOnlyKeys
(
"one"
);
}
@Test
void
getAllIsImmutable
()
{
this
.
registry
.
register
(
"one"
,
this
.
one
);
Map
<
String
,
HealthIndicator
>
snapshot
=
this
.
registry
.
getAll
();
assertThatExceptionOfType
(
UnsupportedOperationException
.
class
).
isThrownBy
(
snapshot:
:
clear
);
}
}
spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/DefaultReactiveHealthIndicatorRegistryTests.java
deleted
100644 → 0
View file @
b08da63d
/*
* Copyright 2012-2020 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
*
* https://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
.
actuate
.
health
;
import
java.util.Map
;
import
org.junit.jupiter.api.BeforeEach
;
import
org.junit.jupiter.api.Test
;
import
reactor.core.publisher.Mono
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThatExceptionOfType
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThatIllegalStateException
;
import
static
org
.
mockito
.
BDDMockito
.
given
;
import
static
org
.
mockito
.
Mockito
.
mock
;
/**
* Tests for {@link DefaultReactiveHealthIndicatorRegistry}.
*
* @author Vedran Pavic
* @author Stephane Nicoll
*/
@Deprecated
class
DefaultReactiveHealthIndicatorRegistryTests
{
private
ReactiveHealthIndicator
one
=
mock
(
ReactiveHealthIndicator
.
class
);
private
ReactiveHealthIndicator
two
=
mock
(
ReactiveHealthIndicator
.
class
);
private
DefaultReactiveHealthIndicatorRegistry
registry
;
@BeforeEach
void
setUp
()
{
given
(
this
.
one
.
health
()).
willReturn
(
Mono
.
just
(
new
Health
.
Builder
().
unknown
().
withDetail
(
"1"
,
"1"
).
build
()));
given
(
this
.
two
.
health
()).
willReturn
(
Mono
.
just
(
new
Health
.
Builder
().
unknown
().
withDetail
(
"2"
,
"2"
).
build
()));
this
.
registry
=
new
DefaultReactiveHealthIndicatorRegistry
();
}
@Test
void
register
()
{
this
.
registry
.
register
(
"one"
,
this
.
one
);
this
.
registry
.
register
(
"two"
,
this
.
two
);
assertThat
(
this
.
registry
.
getAll
()).
hasSize
(
2
);
assertThat
(
this
.
registry
.
get
(
"one"
)).
isSameAs
(
this
.
one
);
assertThat
(
this
.
registry
.
get
(
"two"
)).
isSameAs
(
this
.
two
);
}
@Test
void
registerAlreadyUsedName
()
{
this
.
registry
.
register
(
"one"
,
this
.
one
);
assertThatIllegalStateException
().
isThrownBy
(()
->
this
.
registry
.
register
(
"one"
,
this
.
two
))
.
withMessageContaining
(
"HealthIndicator with name 'one' already registered"
);
}
@Test
void
unregister
()
{
this
.
registry
.
register
(
"one"
,
this
.
one
);
this
.
registry
.
register
(
"two"
,
this
.
two
);
assertThat
(
this
.
registry
.
getAll
()).
hasSize
(
2
);
ReactiveHealthIndicator
two
=
this
.
registry
.
unregister
(
"two"
);
assertThat
(
two
).
isSameAs
(
this
.
two
);
assertThat
(
this
.
registry
.
getAll
()).
hasSize
(
1
);
}
@Test
void
unregisterUnknown
()
{
this
.
registry
.
register
(
"one"
,
this
.
one
);
assertThat
(
this
.
registry
.
getAll
()).
hasSize
(
1
);
ReactiveHealthIndicator
two
=
this
.
registry
.
unregister
(
"two"
);
assertThat
(
two
).
isNull
();
assertThat
(
this
.
registry
.
getAll
()).
hasSize
(
1
);
}
@Test
void
getAllIsASnapshot
()
{
this
.
registry
.
register
(
"one"
,
this
.
one
);
Map
<
String
,
ReactiveHealthIndicator
>
snapshot
=
this
.
registry
.
getAll
();
assertThat
(
snapshot
).
containsOnlyKeys
(
"one"
);
this
.
registry
.
register
(
"two"
,
this
.
two
);
assertThat
(
snapshot
).
containsOnlyKeys
(
"one"
);
}
@Test
void
getAllIsImmutable
()
{
this
.
registry
.
register
(
"one"
,
this
.
one
);
Map
<
String
,
ReactiveHealthIndicator
>
snapshot
=
this
.
registry
.
getAll
();
assertThatExceptionOfType
(
UnsupportedOperationException
.
class
).
isThrownBy
(
snapshot:
:
clear
);
}
}
spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/HealthIndicatorReactiveAdapterTests.java
View file @
35d41e4a
...
...
@@ -29,7 +29,6 @@ import static org.mockito.Mockito.mock;
*
* @author Stephane Nicoll
*/
@SuppressWarnings
(
"deprecation"
)
class
HealthIndicatorReactiveAdapterTests
{
@Test
...
...
spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/OrderedHealthAggregatorTests.java
deleted
100644 → 0
View file @
b08da63d
/*
* Copyright 2012-2020 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
*
* https://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
.
actuate
.
health
;
import
java.util.Arrays
;
import
java.util.HashMap
;
import
java.util.Map
;
import
org.junit.jupiter.api.BeforeEach
;
import
org.junit.jupiter.api.Test
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
/**
* Tests for {@link OrderedHealthAggregator}.
*
* @author Christian Dupuis
*/
@Deprecated
class
OrderedHealthAggregatorTests
{
private
OrderedHealthAggregator
healthAggregator
;
@BeforeEach
void
setup
()
{
this
.
healthAggregator
=
new
OrderedHealthAggregator
();
}
@Test
void
defaultOrder
()
{
Map
<
String
,
Health
>
healths
=
new
HashMap
<>();
healths
.
put
(
"h1"
,
new
Health
.
Builder
().
status
(
Status
.
DOWN
).
build
());
healths
.
put
(
"h2"
,
new
Health
.
Builder
().
status
(
Status
.
UP
).
build
());
healths
.
put
(
"h3"
,
new
Health
.
Builder
().
status
(
Status
.
UNKNOWN
).
build
());
healths
.
put
(
"h4"
,
new
Health
.
Builder
().
status
(
Status
.
OUT_OF_SERVICE
).
build
());
assertThat
(
this
.
healthAggregator
.
aggregate
(
healths
).
getStatus
()).
isEqualTo
(
Status
.
DOWN
);
}
@Test
void
customOrder
()
{
this
.
healthAggregator
.
setStatusOrder
(
Status
.
UNKNOWN
,
Status
.
UP
,
Status
.
OUT_OF_SERVICE
,
Status
.
DOWN
);
Map
<
String
,
Health
>
healths
=
new
HashMap
<>();
healths
.
put
(
"h1"
,
new
Health
.
Builder
().
status
(
Status
.
DOWN
).
build
());
healths
.
put
(
"h2"
,
new
Health
.
Builder
().
status
(
Status
.
UP
).
build
());
healths
.
put
(
"h3"
,
new
Health
.
Builder
().
status
(
Status
.
UNKNOWN
).
build
());
healths
.
put
(
"h4"
,
new
Health
.
Builder
().
status
(
Status
.
OUT_OF_SERVICE
).
build
());
assertThat
(
this
.
healthAggregator
.
aggregate
(
healths
).
getStatus
()).
isEqualTo
(
Status
.
UNKNOWN
);
}
@Test
void
defaultOrderWithCustomStatus
()
{
Map
<
String
,
Health
>
healths
=
new
HashMap
<>();
healths
.
put
(
"h1"
,
new
Health
.
Builder
().
status
(
Status
.
DOWN
).
build
());
healths
.
put
(
"h2"
,
new
Health
.
Builder
().
status
(
Status
.
UP
).
build
());
healths
.
put
(
"h3"
,
new
Health
.
Builder
().
status
(
Status
.
UNKNOWN
).
build
());
healths
.
put
(
"h4"
,
new
Health
.
Builder
().
status
(
Status
.
OUT_OF_SERVICE
).
build
());
healths
.
put
(
"h5"
,
new
Health
.
Builder
().
status
(
new
Status
(
"CUSTOM"
)).
build
());
assertThat
(
this
.
healthAggregator
.
aggregate
(
healths
).
getStatus
()).
isEqualTo
(
Status
.
DOWN
);
}
@Test
void
customOrderWithCustomStatus
()
{
this
.
healthAggregator
.
setStatusOrder
(
Arrays
.
asList
(
"DOWN"
,
"OUT_OF_SERVICE"
,
"UP"
,
"UNKNOWN"
,
"CUSTOM"
));
Map
<
String
,
Health
>
healths
=
new
HashMap
<>();
healths
.
put
(
"h1"
,
new
Health
.
Builder
().
status
(
Status
.
DOWN
).
build
());
healths
.
put
(
"h2"
,
new
Health
.
Builder
().
status
(
Status
.
UP
).
build
());
healths
.
put
(
"h3"
,
new
Health
.
Builder
().
status
(
Status
.
UNKNOWN
).
build
());
healths
.
put
(
"h4"
,
new
Health
.
Builder
().
status
(
Status
.
OUT_OF_SERVICE
).
build
());
healths
.
put
(
"h5"
,
new
Health
.
Builder
().
status
(
new
Status
(
"CUSTOM"
)).
build
());
assertThat
(
this
.
healthAggregator
.
aggregate
(
healths
).
getStatus
()).
isEqualTo
(
Status
.
DOWN
);
}
}
spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/ReactiveHealthContributorTests.java
View file @
35d41e4a
...
...
@@ -39,7 +39,6 @@ class ReactiveHealthContributorTests {
}
@Test
@SuppressWarnings
(
"deprecation"
)
void
adaptWhenHealthIndicatorReturnsHealthIndicatorReactiveAdapter
()
{
HealthIndicator
indicator
=
()
->
Health
.
outOfService
().
build
();
ReactiveHealthContributor
adapted
=
ReactiveHealthContributor
.
adapt
(
indicator
);
...
...
spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/ReactiveHealthIndicatorRegistryFactoryTests.java
deleted
100644 → 0
View file @
b08da63d
/*
* Copyright 2012-2020 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
*
* https://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
.
actuate
.
health
;
import
java.util.Collections
;
import
org.junit.jupiter.api.Test
;
import
reactor.core.publisher.Mono
;
import
reactor.test.StepVerifier
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
/**
* Tests for {@link ReactiveHealthIndicatorRegistryFactory}.
*
* @author Stephane Nicoll
*/
@Deprecated
class
ReactiveHealthIndicatorRegistryFactoryTests
{
private
static
final
Health
UP
=
new
Health
.
Builder
().
status
(
Status
.
UP
).
build
();
private
static
final
Health
DOWN
=
new
Health
.
Builder
().
status
(
Status
.
DOWN
).
build
();
private
final
ReactiveHealthIndicatorRegistryFactory
factory
=
new
ReactiveHealthIndicatorRegistryFactory
();
@Test
void
defaultHealthIndicatorNameFactory
()
{
ReactiveHealthIndicatorRegistry
registry
=
this
.
factory
.
createReactiveHealthIndicatorRegistry
(
Collections
.
singletonMap
(
"myHealthIndicator"
,
()
->
Mono
.
just
(
UP
)),
null
);
assertThat
(
registry
.
getAll
()).
containsOnlyKeys
(
"my"
);
}
@Test
void
healthIndicatorIsAdapted
()
{
ReactiveHealthIndicatorRegistry
registry
=
this
.
factory
.
createReactiveHealthIndicatorRegistry
(
Collections
.
singletonMap
(
"test"
,
()
->
Mono
.
just
(
UP
)),
Collections
.
singletonMap
(
"regular"
,
()
->
DOWN
));
assertThat
(
registry
.
getAll
()).
containsOnlyKeys
(
"test"
,
"regular"
);
StepVerifier
.
create
(
registry
.
get
(
"regular"
).
health
()).
consumeNextWith
((
h
)
->
{
assertThat
(
h
.
getStatus
()).
isEqualTo
(
Status
.
DOWN
);
assertThat
(
h
.
getDetails
()).
isEmpty
();
}).
verifyComplete
();
}
}
spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/ConfigurationBeanFactoryMetadata.java
deleted
100644 → 0
View file @
b08da63d
/*
* Copyright 2012-2020 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
*
* https://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
.
context
.
properties
;
import
java.lang.annotation.Annotation
;
import
java.lang.reflect.Method
;
import
java.util.HashMap
;
import
java.util.Map
;
import
org.springframework.beans.BeansException
;
import
org.springframework.beans.factory.config.BeanDefinition
;
import
org.springframework.beans.factory.config.ConfigurableListableBeanFactory
;
import
org.springframework.beans.factory.support.BeanDefinitionBuilder
;
import
org.springframework.beans.factory.support.BeanDefinitionRegistry
;
import
org.springframework.beans.factory.support.RootBeanDefinition
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.ApplicationContextAware
;
import
org.springframework.context.ConfigurableApplicationContext
;
import
org.springframework.core.annotation.AnnotationUtils
;
/**
* Utility class to memorize {@code @Bean} definition metadata during initialization of
* the bean factory.
*
* @author Dave Syer
* @since 1.1.0
* @deprecated since 2.2.0 in favor of {@link ConfigurationPropertiesBean}
*/
@Deprecated
public
class
ConfigurationBeanFactoryMetadata
implements
ApplicationContextAware
{
/**
* The bean name that this class is registered with.
*/
public
static
final
String
BEAN_NAME
=
ConfigurationBeanFactoryMetadata
.
class
.
getName
();
private
ConfigurableApplicationContext
applicationContext
;
public
<
A
extends
Annotation
>
Map
<
String
,
Object
>
getBeansWithFactoryAnnotation
(
Class
<
A
>
type
)
{
Map
<
String
,
Object
>
result
=
new
HashMap
<>();
for
(
String
name
:
this
.
applicationContext
.
getBeanFactory
().
getBeanDefinitionNames
())
{
if
(
findFactoryAnnotation
(
name
,
type
)
!=
null
)
{
result
.
put
(
name
,
this
.
applicationContext
.
getBean
(
name
));
}
}
return
result
;
}
public
<
A
extends
Annotation
>
A
findFactoryAnnotation
(
String
beanName
,
Class
<
A
>
type
)
{
Method
method
=
findFactoryMethod
(
beanName
);
return
(
method
!=
null
)
?
AnnotationUtils
.
findAnnotation
(
method
,
type
)
:
null
;
}
public
Method
findFactoryMethod
(
String
beanName
)
{
ConfigurableListableBeanFactory
beanFactory
=
this
.
applicationContext
.
getBeanFactory
();
if
(
beanFactory
.
containsBeanDefinition
(
beanName
))
{
BeanDefinition
beanDefinition
=
beanFactory
.
getMergedBeanDefinition
(
beanName
);
if
(
beanDefinition
instanceof
RootBeanDefinition
)
{
return
((
RootBeanDefinition
)
beanDefinition
).
getResolvedFactoryMethod
();
}
}
return
null
;
}
@Override
public
void
setApplicationContext
(
ApplicationContext
applicationContext
)
throws
BeansException
{
this
.
applicationContext
=
(
ConfigurableApplicationContext
)
applicationContext
;
}
static
void
register
(
BeanDefinitionRegistry
registry
)
{
if
(!
registry
.
containsBeanDefinition
(
BEAN_NAME
))
{
BeanDefinition
definition
=
BeanDefinitionBuilder
.
genericBeanDefinition
(
ConfigurationBeanFactoryMetadata
.
class
,
ConfigurationBeanFactoryMetadata:
:
new
).
getBeanDefinition
();
definition
.
setRole
(
BeanDefinition
.
ROLE_INFRASTRUCTURE
);
registry
.
registerBeanDefinition
(
ConfigurationBeanFactoryMetadata
.
BEAN_NAME
,
definition
);
}
}
}
spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/EnableConfigurationPropertiesRegistrar.java
View file @
35d41e4a
...
...
@@ -48,11 +48,9 @@ class EnableConfigurationPropertiesRegistrar implements ImportBeanDefinitionRegi
.
filter
((
type
)
->
void
.
class
!=
type
).
collect
(
Collectors
.
toSet
());
}
@SuppressWarnings
(
"deprecation"
)
static
void
registerInfrastructureBeans
(
BeanDefinitionRegistry
registry
)
{
ConfigurationPropertiesBindingPostProcessor
.
register
(
registry
);
BoundConfigurationProperties
.
register
(
registry
);
ConfigurationBeanFactoryMetadata
.
register
(
registry
);
}
}
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