Commit 45a19cd4 by Robert Winkler Committed by Johannes Edmeier

Add spring.boot.admin.client.enabled property

Add spring.boot.admin.client.enabled property to explicitly disable the spring-boot-admin-client, (e.g. for unit tests). Defaults to true. The client is active when spring.boot.admin.client.enabled is true and spring.boot.admin.url is set. fixes #156
parent 8f72ad3d
......@@ -186,6 +186,10 @@ The Spring Boot Admin Client registers the application at the admin server. This
|===
| Property name |Description |Default value
| spring.boot.admin.client.enabled
| Enables the Spring Boot Admin Client.
| true
| spring.boot.admin.url
| List of URLs of the Spring Boot Admin server to register at. This triggers the AutoConfiguration. *Mandatory*.
|
......
......@@ -19,9 +19,9 @@ import java.util.Arrays;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
......@@ -39,7 +39,7 @@ import de.codecentric.boot.admin.web.BasicAuthHttpRequestInterceptor;
*/
@Configuration
@EnableConfigurationProperties({ AdminProperties.class, AdminClientProperties.class })
@ConditionalOnProperty("spring.boot.admin.url")
@Conditional(SpringBootAdminClientEnabledCondition.class)
public class SpringBootAdminClientAutoConfiguration {
@Autowired
......
/*
* Copyright 2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.codecentric.boot.admin.config;
import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
import org.springframework.boot.bind.RelaxedPropertyResolver;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.env.Environment;
import org.springframework.core.type.AnnotatedTypeMetadata;
import org.springframework.util.StringUtils;
/**
* This condition checks if the client should be enabled. Two properties are checked:
* spring.boot.admin.client.enabled and spring.boot.admin.url. The following table shows under which
* conditions the client is active.
*
* <pre>
* | enabled: false | enabled: true (default) |
* --------- | -------------- | ----------------------- |
* url empty | inactive | inactive |
* (default) | | |
* --------- | -------------- | ----------------------- |
* url set | inactive | active |
* </pre>
*/
public class SpringBootAdminClientEnabledCondition extends SpringBootCondition {
@Override
public ConditionOutcome getMatchOutcome(ConditionContext context,
AnnotatedTypeMetadata annotatedTypeMetadata) {
if (!isEnabled(context.getEnvironment())) {
return ConditionOutcome.noMatch(
"Spring Boot Client is disabled, because 'spring.boot.admin.client.enabled' is false.");
}
if (isUrlEmpty(context.getEnvironment())) {
return ConditionOutcome.noMatch(
"Spring Boot Client is disabled, because 'spring.boot.admin.url' is empty.");
}
return ConditionOutcome.match();
}
private boolean isEnabled(Environment env) {
RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(env,
"spring.boot.admin.client.");
return resolver.getProperty("enabled", Boolean.class, Boolean.TRUE);
}
private boolean isUrlEmpty(Environment env) {
RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(env, "spring.boot.admin.");
return StringUtils.isEmpty(resolver.getProperty("url", ""));
}
}
{"groups": [
],"properties": [
{
"name": "spring.boot.admin.client.enabled",
"type": "java.lang.Boolean",
"description": "Enable Spring Admin Client.",
"defaultValue": "true"
}
]}
......@@ -34,6 +34,13 @@ public class SpringBootAdminClientAutoConfigurationTest {
context.getBean(ApplicationRegistrator.class);
}
@Test
public void disabled() {
load("spring.boot.admin.url:http://localhost:8081",
"spring.boot.admin.client.enabled:false");
assertTrue(context.getBeansOfType(ApplicationRegistrator.class).isEmpty());
}
private void load(String... environment) {
AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext();
applicationContext.register(ServerPropertiesAutoConfiguration.class);
......
package de.codecentric.boot.admin.config;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import org.junit.Before;
import org.junit.Test;
import org.mockito.BDDMockito;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
import org.springframework.mock.env.MockEnvironment;
public class SpringBootAdminClientEnabledConditionTest {
private SpringBootAdminClientEnabledCondition condition;
private AnnotatedTypeMetadata annotatedTypeMetadata;
private ConditionContext conditionContext;
@Before
public void setUp() {
condition = new SpringBootAdminClientEnabledCondition();
annotatedTypeMetadata = mock(AnnotatedTypeMetadata.class);
conditionContext = mock(ConditionContext.class);
}
@Test
public void test_emptyUrl_enabled() {
MockEnvironment environment = new MockEnvironment();
BDDMockito.given(conditionContext.getEnvironment()).willReturn(environment);
assertFalse(condition.getMatchOutcome(conditionContext, annotatedTypeMetadata).isMatch());
}
@Test
public void test_emptyUrl_disabled() {
MockEnvironment environment = new MockEnvironment();
environment.setProperty("spring.boot.admin.client.enabled", "false");
BDDMockito.given(conditionContext.getEnvironment()).willReturn(environment);
assertFalse(condition.getMatchOutcome(conditionContext, annotatedTypeMetadata).isMatch());
}
@Test
public void test_nonEmptyUrl_disabled() {
MockEnvironment environment = new MockEnvironment();
environment.setProperty("spring.boot.admin.client.enabled", "false");
environment.setProperty("spring.boot.admin.url", "http://localhost:8080/management");
BDDMockito.given(conditionContext.getEnvironment()).willReturn(environment);
assertFalse(condition.getMatchOutcome(conditionContext, annotatedTypeMetadata).isMatch());
}
@Test
public void test_nonEmptyUrl_enabled() {
MockEnvironment environment = new MockEnvironment();
environment.setProperty("spring.boot.admin.url", "http://localhost:8080/management");
BDDMockito.given(conditionContext.getEnvironment()).willReturn(environment);
assertTrue(condition.getMatchOutcome(conditionContext, annotatedTypeMetadata).isMatch());
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment