Browse Source

Adds spring-cloud-starter-bootstrap.

This allows users to opt-in to bootstrap via classpath rather than properties.
pull/809/head
spencergibb 4 years ago
parent
commit
8f8f7d4920
No known key found for this signature in database
GPG Key ID: 7788A47380690861
  1. 1
      pom.xml
  2. 5
      spring-cloud-commons-dependencies/pom.xml
  3. 6
      spring-cloud-context/src/main/java/org/springframework/cloud/util/ConditionalOnBootstrapDisabled.java
  4. 6
      spring-cloud-context/src/main/java/org/springframework/cloud/util/ConditionalOnBootstrapEnabled.java
  5. 24
      spring-cloud-context/src/main/java/org/springframework/cloud/util/PropertyUtils.java
  6. 36
      spring-cloud-starter-bootstrap/pom.xml
  7. 29
      spring-cloud-starter-bootstrap/src/main/java/org/springframework/cloud/bootstrap/marker/Marker.java
  8. 45
      spring-cloud-starter-bootstrap/src/test/java/org/springframework/cloud/bootstrap/marker/MarkerTests.java
  9. 1
      spring-cloud-starter-bootstrap/src/test/resources/bootstrap.properties

1
pom.xml

@ -161,6 +161,7 @@ @@ -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>

5
spring-cloud-commons-dependencies/pom.xml

@ -54,6 +54,11 @@ @@ -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>

6
spring-cloud-context/src/main/java/org/springframework/cloud/util/ConditionalOnBootstrapDisabled.java

@ -22,6 +22,7 @@ import java.lang.annotation.Retention; @@ -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 { @@ -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 {

6
spring-cloud-context/src/main/java/org/springframework/cloud/util/ConditionalOnBootstrapEnabled.java

@ -23,6 +23,7 @@ import java.lang.annotation.RetentionPolicy; @@ -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 { @@ -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 {

24
spring-cloud-context/src/main/java/org/springframework/cloud/util/PropertyUtils.java

@ -17,6 +17,7 @@ @@ -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 { @@ -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

@ -0,0 +1,36 @@ @@ -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>

29
spring-cloud-starter-bootstrap/src/main/java/org/springframework/cloud/bootstrap/marker/Marker.java

@ -0,0 +1,29 @@ @@ -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() {
}
}

45
spring-cloud-starter-bootstrap/src/test/java/org/springframework/cloud/bootstrap/marker/MarkerTests.java

@ -0,0 +1,45 @@ @@ -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 {
}
}

1
spring-cloud-starter-bootstrap/src/test/resources/bootstrap.properties

@ -0,0 +1 @@ @@ -0,0 +1 @@
my.prop=my.value
Loading…
Cancel
Save