diff --git a/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/config/AdminServerAutoConfiguration.java b/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/config/AdminServerAutoConfiguration.java index 1739db2fd7a..70c646678b0 100644 --- a/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/config/AdminServerAutoConfiguration.java +++ b/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/config/AdminServerAutoConfiguration.java @@ -100,7 +100,22 @@ public InstanceIdGenerator instanceIdGenerator() { @ConditionalOnMissingBean public StatusUpdater statusUpdater(InstanceRepository instanceRepository, InstanceWebClient.Builder instanceWebClientBuilder) { - return new StatusUpdater(instanceRepository, instanceWebClientBuilder.build(), new ApiMediaTypeHandler()); + + StatusUpdater updater = new StatusUpdater(instanceRepository, instanceWebClientBuilder.build(), + new ApiMediaTypeHandler()); + + AdminServerProperties.MonitorProperties monitorProperties = this.adminServerProperties.getMonitor(); + + Duration timeout = monitorProperties.getDefaultTimeout(); + Duration interval = monitorProperties.getStatusInterval(); + + if (timeout.compareTo(interval) > 0) { + timeout = interval; + } + + updater.timeout(timeout); + + return updater; } @Bean(initMethod = "start", destroyMethod = "stop") @@ -117,8 +132,8 @@ public StatusUpdateTrigger statusUpdateTrigger(StatusUpdater statusUpdater, Publ defaultTimeout, statusInterval); } - return new StatusUpdateTrigger(statusUpdater, events, monitorProperties.getStatusInterval(), - monitorProperties.getStatusLifetime(), monitorProperties.getStatusMaxBackoff()); + return new StatusUpdateTrigger(statusUpdater, events, statusInterval, monitorProperties.getStatusLifetime(), + monitorProperties.getStatusMaxBackoff()); } @Bean diff --git a/spring-boot-admin-server/src/test/java/de/codecentric/boot/admin/server/config/AdminServerAutoConfigurationTest.java b/spring-boot-admin-server/src/test/java/de/codecentric/boot/admin/server/config/AdminServerAutoConfigurationTest.java index 0fb44f63930..c8519e46a27 100644 --- a/spring-boot-admin-server/src/test/java/de/codecentric/boot/admin/server/config/AdminServerAutoConfigurationTest.java +++ b/spring-boot-admin-server/src/test/java/de/codecentric/boot/admin/server/config/AdminServerAutoConfigurationTest.java @@ -16,6 +16,8 @@ package de.codecentric.boot.admin.server.config; +import java.time.Duration; + import com.hazelcast.config.Config; import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; @@ -36,6 +38,7 @@ import de.codecentric.boot.admin.server.notify.MailNotifier; import de.codecentric.boot.admin.server.notify.NotificationTrigger; import de.codecentric.boot.admin.server.notify.Notifier; +import de.codecentric.boot.admin.server.services.StatusUpdater; import static org.assertj.core.api.Assertions.assertThat; @@ -64,6 +67,28 @@ void hazelcastConfig() { }); } + @Test + void shouldApplyConfiguredTimeoutFromProperties() { + this.contextRunner + .withPropertyValues("spring.boot.admin.monitor.default-timeout=5s", + "spring.boot.admin.monitor.status-interval=10s") + .run((context) -> { + StatusUpdater updater = context.getBean(StatusUpdater.class); + assertThat(updater).extracting("timeout").isEqualTo(Duration.ofSeconds(5)); + }); + } + + @Test + void shouldClampTimeoutToInterval() { + this.contextRunner + .withPropertyValues("spring.boot.admin.monitor.default-timeout=20s", + "spring.boot.admin.monitor.status-interval=10s") + .run((context) -> { + StatusUpdater updater = context.getBean(StatusUpdater.class); + assertThat(updater).extracting("timeout").isEqualTo(Duration.ofSeconds(10)); + }); + } + public static class TestHazelcastConfig { @Bean