Add auto-configuration for Spring Cloud
Enable if all of the following are true: - spring-cloud is on the classpath - There is no Cloud bean present (usually done by extending AbstractCloudConfig) - The "cloud" profile is active Fixes gh-1302 Autoconfigure spring-cloud
This commit is contained in:
parent
21995cc85d
commit
912d5cf40b
|
|
@ -240,6 +240,11 @@
|
|||
<artifactId>spring-rabbit</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-spring-service-connector</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.mobile</groupId>
|
||||
<artifactId>spring-mobile-device</artifactId>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,60 @@
|
|||
/*
|
||||
* Copyright 2012-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 org.springframework.boot.autoconfigure.cloud;
|
||||
|
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.cloud.Cloud;
|
||||
import org.springframework.cloud.app.ApplicationInstanceInfo;
|
||||
import org.springframework.cloud.config.java.CloudScan;
|
||||
import org.springframework.cloud.config.java.CloudScanConfiguration;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.context.annotation.Profile;
|
||||
import org.springframework.core.Ordered;
|
||||
import org.springframework.core.annotation.Order;
|
||||
|
||||
/**
|
||||
* {@link EnableAutoConfiguration Auto-configuration} for Spring Cloud.
|
||||
* <p>
|
||||
* Activates when there is no bean of type {@link Cloud} is configured in the context, the
|
||||
* {@link Cloud} type (this spring-cloud) is on the classpath, and the "cloud" profile is
|
||||
* active.
|
||||
* <p>
|
||||
* Once in effect, the auto-configuration is the equivalent of adding the
|
||||
* {@link CloudScan} annotation in one of the configuration file. Specifically, it adds a
|
||||
* bean for each service bound to the application and one for
|
||||
* {@link ApplicationInstanceInfo}
|
||||
*
|
||||
* @author Ramnivas Laddad
|
||||
* @since 1.2.0
|
||||
*/
|
||||
@Configuration
|
||||
@Profile("cloud")
|
||||
@Order(CloudAutoConfiguration.ORDER)
|
||||
@ConditionalOnClass(Cloud.class)
|
||||
@ConditionalOnMissingBean(Cloud.class)
|
||||
@ConditionalOnProperty(prefix = "spring.cloud", name = "enabled", havingValue = "true", matchIfMissing = true)
|
||||
@Import(CloudScanConfiguration.class)
|
||||
public class CloudAutoConfiguration {
|
||||
|
||||
// Cloud configuration needs to happen early (before data, mongo etc.)
|
||||
public static final int ORDER = Ordered.HIGHEST_PRECEDENCE + 20;
|
||||
|
||||
}
|
||||
|
|
@ -9,6 +9,7 @@ org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
|
|||
org.springframework.boot.autoconfigure.MessageSourceAutoConfiguration,\
|
||||
org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration,\
|
||||
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
|
||||
org.springframework.boot.autoconfigure.cloud.CloudAutoConfiguration,\
|
||||
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration,\
|
||||
org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration,\
|
||||
org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration,\
|
||||
|
|
|
|||
|
|
@ -0,0 +1,32 @@
|
|||
/*
|
||||
* Copyright 2012-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 org.springframework.boot.autoconfigure;
|
||||
|
||||
import org.springframework.core.io.ResourceLoader;
|
||||
|
||||
/**
|
||||
* Public version of {@link AutoConfigurationSorter} for use in tests.
|
||||
*
|
||||
* @author Phillip Webb
|
||||
*/
|
||||
public class TestAutoConfigurationSorter extends AutoConfigurationSorter {
|
||||
|
||||
public TestAutoConfigurationSorter(ResourceLoader resourceLoader) {
|
||||
super(resourceLoader);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
* Copyright 2012-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 org.springframework.boot.autoconfigure.cloud;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.springframework.boot.autoconfigure.TestAutoConfigurationSorter;
|
||||
import org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
|
||||
import org.springframework.core.io.DefaultResourceLoader;
|
||||
import org.springframework.core.io.ResourceLoader;
|
||||
|
||||
import static org.hamcrest.Matchers.equalTo;
|
||||
import static org.junit.Assert.assertThat;
|
||||
|
||||
/**
|
||||
* Tests for {@link CloudAutoConfiguration}.
|
||||
*
|
||||
* @author Phillip Webb
|
||||
*/
|
||||
public class CloudAutoConfigurationTests {
|
||||
|
||||
@Test
|
||||
public void testOrder() throws Exception {
|
||||
ResourceLoader loader = new DefaultResourceLoader();
|
||||
TestAutoConfigurationSorter sorter = new TestAutoConfigurationSorter(loader);
|
||||
Collection<String> classNames = new ArrayList<String>();
|
||||
classNames.add(MongoAutoConfiguration.class.getName());
|
||||
classNames.add(DataSourceAutoConfiguration.class.getName());
|
||||
classNames.add(MongoRepositoriesAutoConfiguration.class.getName());
|
||||
classNames.add(JpaRepositoriesAutoConfiguration.class.getName());
|
||||
classNames.add(CloudAutoConfiguration.class.getName());
|
||||
List<String> ordered = sorter.getInPriorityOrder(classNames);
|
||||
assertThat(ordered.get(0), equalTo(CloudAutoConfiguration.class.getName()));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -100,6 +100,7 @@
|
|||
<spock.version>0.7-groovy-2.0</spock.version>
|
||||
<spring.version>4.1.0.BUILD-SNAPSHOT</spring.version>
|
||||
<spring-amqp.version>1.3.5.RELEASE</spring-amqp.version>
|
||||
<spring-cloud.version>1.1.0.BUILD-SNAPSHOT</spring-cloud.version>
|
||||
<spring-batch.version>3.0.1.RELEASE</spring-batch.version>
|
||||
<spring-data-releasetrain.version>Dijkstra-SR3</spring-data-releasetrain.version>
|
||||
<spring-hateoas.version>0.16.0.RELEASE</spring-hateoas.version>
|
||||
|
|
@ -1018,6 +1019,11 @@
|
|||
<artifactId>spring-batch-test</artifactId>
|
||||
<version>${spring-batch.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-spring-service-connector</artifactId>
|
||||
<version>${spring-cloud.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.data</groupId>
|
||||
<artifactId>spring-data-releasetrain</artifactId>
|
||||
|
|
@ -1306,4 +1312,4 @@
|
|||
</plugins>
|
||||
</pluginManagement>
|
||||
</build>
|
||||
</project>
|
||||
</project>
|
||||
|
|
|
|||
Loading…
Reference in New Issue