Adds spring-cloud-starter-bootstrap.
This allows users to opt-in to bootstrap via classpath rather than properties.
This commit is contained in:
1
pom.xml
1
pom.xml
@@ -161,6 +161,7 @@
|
||||
<module>spring-cloud-commons</module>
|
||||
<module>spring-cloud-loadbalancer</module>
|
||||
<module>spring-cloud-starter</module>
|
||||
<module>spring-cloud-starter-bootstrap</module>
|
||||
<module>spring-cloud-starter-loadbalancer</module>
|
||||
<module>docs</module>
|
||||
</modules>
|
||||
|
||||
@@ -54,6 +54,11 @@
|
||||
<artifactId>spring-cloud-starter</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-bootstrap</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
|
||||
|
||||
@@ -22,6 +22,7 @@ import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.boot.autoconfigure.condition.NoneNestedConditions;
|
||||
import org.springframework.context.annotation.Conditional;
|
||||
@@ -41,6 +42,11 @@ public @interface ConditionalOnBootstrapDisabled {
|
||||
super(ConfigurationPhase.REGISTER_BEAN);
|
||||
}
|
||||
|
||||
@ConditionalOnClass(name = "org.springframework.cloud.bootstrap.marker.Marker")
|
||||
static class OnBootstrapMarkerClassPresent {
|
||||
|
||||
}
|
||||
|
||||
@ConditionalOnProperty(name = USE_LEGACY_PROCESSING_PROPERTY)
|
||||
static class OnUseLegacyProcessingEnabled {
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
import org.springframework.boot.autoconfigure.condition.AnyNestedCondition;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.context.annotation.Conditional;
|
||||
|
||||
@@ -41,6 +42,11 @@ public @interface ConditionalOnBootstrapEnabled {
|
||||
super(ConfigurationPhase.REGISTER_BEAN);
|
||||
}
|
||||
|
||||
@ConditionalOnClass(name = PropertyUtils.MARKER_CLASS)
|
||||
static class OnBootstrapMarkerClassPresent {
|
||||
|
||||
}
|
||||
|
||||
@ConditionalOnProperty(name = USE_LEGACY_PROCESSING_PROPERTY)
|
||||
static class OnUseLegacyProcessingEnabled {
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package org.springframework.cloud.util;
|
||||
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.util.ClassUtils;
|
||||
|
||||
public abstract class PropertyUtils {
|
||||
|
||||
@@ -30,12 +31,33 @@ public abstract class PropertyUtils {
|
||||
*/
|
||||
public static final String USE_LEGACY_PROCESSING_PROPERTY = "spring.config.use-legacy-processing";
|
||||
|
||||
/**
|
||||
* Property name for bootstrap marker class name.
|
||||
*/
|
||||
public static final String MARKER_CLASS = "org.springframework.cloud.bootstrap.marker.Marker";
|
||||
|
||||
/**
|
||||
* Boolean if bootstrap marker class exists.
|
||||
*/
|
||||
public static final boolean MARKER_CLASS_EXISTS = markerClassExists();
|
||||
|
||||
private static boolean markerClassExists() {
|
||||
try {
|
||||
ClassUtils.forName(MARKER_CLASS, null);
|
||||
return true;
|
||||
}
|
||||
catch (ClassNotFoundException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private PropertyUtils() {
|
||||
|
||||
}
|
||||
|
||||
public static boolean bootstrapEnabled(Environment environment) {
|
||||
return environment.getProperty(BOOTSTRAP_ENABLED_PROPERTY, Boolean.class, false);
|
||||
return environment.getProperty(BOOTSTRAP_ENABLED_PROPERTY, Boolean.class, false)
|
||||
|| MARKER_CLASS_EXISTS;
|
||||
}
|
||||
|
||||
public static boolean useLegacyProcessing(Environment environment) {
|
||||
|
||||
36
spring-cloud-starter-bootstrap/pom.xml
Normal file
36
spring-cloud-starter-bootstrap/pom.xml
Normal file
@@ -0,0 +1,36 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-commons-parent</artifactId>
|
||||
<version>3.0.0-SNAPSHOT</version>
|
||||
<relativePath>..</relativePath>
|
||||
</parent>
|
||||
<packaging>jar</packaging>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>spring-cloud-starter-bootstrap</artifactId>
|
||||
<name>spring-cloud-starter-bootstrap</name>
|
||||
<description>Spring Cloud Starter Bootstrap</description>
|
||||
<url>https://projects.spring.io/spring-cloud</url>
|
||||
<organization>
|
||||
<name>Pivotal Software, Inc.</name>
|
||||
<url>https://www.spring.io</url>
|
||||
</organization>
|
||||
<properties>
|
||||
<main.basedir>${basedir}/../..</main.basedir>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright 2013-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.cloud.bootstrap.marker;
|
||||
|
||||
/**
|
||||
* A marker class, so that, if present, spring cloud bootstrap is enable similar to how
|
||||
* 'spring.cloud.bootstrap.enabled=true' works.
|
||||
*/
|
||||
public abstract class Marker {
|
||||
|
||||
private Marker() {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
* Copyright 2013-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.cloud.bootstrap.marker;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.SpringBootConfiguration;
|
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.core.env.Environment;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
@SpringBootTest
|
||||
public class MarkerTests {
|
||||
|
||||
@Autowired
|
||||
private Environment env;
|
||||
|
||||
@Test
|
||||
public void testBootstrapIsEnabled() {
|
||||
assertThat(env.getProperty("my.prop")).isEqualTo("my.value");
|
||||
}
|
||||
|
||||
@SpringBootConfiguration
|
||||
@EnableAutoConfiguration
|
||||
protected static class TestConfig {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
my.prop=my.value
|
||||
Reference in New Issue
Block a user