Skip to content

Commit 5e95ba8

Browse files
acktsapsnicoll
authored andcommitted
Back off if a custom ApplicationAvailability bean is present
See gh-34347
1 parent 098d338 commit 5e95ba8

File tree

2 files changed

+47
-6
lines changed

2 files changed

+47
-6
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/availability/ApplicationAvailabilityAutoConfiguration.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2022 the original author or authors.
2+
* Copyright 2012-2023 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -17,6 +17,8 @@
1717
package org.springframework.boot.autoconfigure.availability;
1818

1919
import org.springframework.boot.autoconfigure.AutoConfiguration;
20+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
21+
import org.springframework.boot.availability.ApplicationAvailability;
2022
import org.springframework.boot.availability.ApplicationAvailabilityBean;
2123
import org.springframework.context.annotation.Bean;
2224

@@ -25,13 +27,15 @@
2527
* {@link ApplicationAvailabilityBean}.
2628
*
2729
* @author Brian Clozel
30+
* @author Taeik Lim
2831
* @since 2.3.0
2932
*/
3033
@AutoConfiguration
3134
public class ApplicationAvailabilityAutoConfiguration {
3235

3336
@Bean
34-
public ApplicationAvailabilityBean applicationAvailability() {
37+
@ConditionalOnMissingBean(ApplicationAvailability.class)
38+
public ApplicationAvailability applicationAvailability() {
3539
return new ApplicationAvailabilityBean();
3640
}
3741

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,30 +14,67 @@
1414
* limitations under the License.
1515
*/
1616

17-
package org.springframework.boot.autoconfigure.kubernetes;
17+
package org.springframework.boot.autoconfigure.availability;
1818

1919
import org.junit.jupiter.api.Test;
2020

2121
import org.springframework.boot.autoconfigure.AutoConfigurations;
22-
import org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration;
2322
import org.springframework.boot.availability.ApplicationAvailability;
23+
import org.springframework.boot.availability.AvailabilityChangeEvent;
24+
import org.springframework.boot.availability.AvailabilityState;
2425
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
26+
import org.springframework.context.annotation.Bean;
27+
import org.springframework.context.annotation.Configuration;
2528

2629
import static org.assertj.core.api.Assertions.assertThat;
2730

2831
/**
2932
* Tests for {@link ApplicationAvailabilityAutoConfiguration}
3033
*
3134
* @author Brian Clozel
35+
* @author Taeik Lim
3236
*/
3337
class ApplicationAvailabilityAutoConfigurationTests {
3438

3539
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
3640
.withConfiguration(AutoConfigurations.of(ApplicationAvailabilityAutoConfiguration.class));
3741

3842
@Test
39-
void providerIsPresent() {
40-
this.contextRunner.run(((context) -> assertThat(context).hasSingleBean(ApplicationAvailability.class)));
43+
void providerIsPresentWhenNotRegistered() {
44+
this.contextRunner.run(((context) -> assertThat(context).hasSingleBean(ApplicationAvailability.class)
45+
.hasBean("applicationAvailability")));
46+
}
47+
48+
@Test
49+
void providerIsPresentWithRegisteredOne() {
50+
this.contextRunner.withUserConfiguration(ApplicationAvailabilityConfig.class)
51+
.run(((context) -> assertThat(context).hasSingleBean(ApplicationAvailability.class)
52+
.hasBean("customApplicationAvailability")));
53+
}
54+
55+
@Configuration(proxyBeanMethods = false)
56+
static class ApplicationAvailabilityConfig {
57+
58+
@Bean
59+
ApplicationAvailability customApplicationAvailability() {
60+
return new ApplicationAvailability() {
61+
@Override
62+
public <S extends AvailabilityState> S getState(Class<S> stateType, S defaultState) {
63+
return null;
64+
}
65+
66+
@Override
67+
public <S extends AvailabilityState> S getState(Class<S> stateType) {
68+
return null;
69+
}
70+
71+
@Override
72+
public <S extends AvailabilityState> AvailabilityChangeEvent<S> getLastChangeEvent(Class<S> stateType) {
73+
return null;
74+
}
75+
};
76+
}
77+
4178
}
4279

4380
}

0 commit comments

Comments
 (0)