+ * 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. + *
+ * 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;
+
+}
diff --git a/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories b/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories
index 8516090b8f0..7f3580dad70 100644
--- a/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories
+++ b/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories
@@ -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,\
diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/TestAutoConfigurationSorter.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/TestAutoConfigurationSorter.java
new file mode 100644
index 00000000000..5fa37f7b389
--- /dev/null
+++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/TestAutoConfigurationSorter.java
@@ -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);
+ }
+
+}
diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/cloud/CloudAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/cloud/CloudAutoConfigurationTests.java
new file mode 100644
index 00000000000..5366fd1c47f
--- /dev/null
+++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/cloud/CloudAutoConfigurationTests.java
@@ -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