diff --git a/spring-boot-autoconfigure/pom.xml b/spring-boot-autoconfigure/pom.xml index 017a68059f0..b7fc565c62d 100644 --- a/spring-boot-autoconfigure/pom.xml +++ b/spring-boot-autoconfigure/pom.xml @@ -186,6 +186,11 @@ spring-data-redis true + + org.springframework.data + spring-data-elasticsearch + true + org.springframework.data spring-data-solr diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/ElasticsearchRepositoriesAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/ElasticsearchRepositoriesAutoConfiguration.java new file mode 100644 index 00000000000..aedab9c4c7d --- /dev/null +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/ElasticsearchRepositoriesAutoConfiguration.java @@ -0,0 +1,44 @@ +/* + * 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.data; + +import org.elasticsearch.client.Client; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; +import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; +import org.springframework.data.elasticsearch.repository.support.ElasticsearchRepositoryFactoryBean; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for Spring Data's Elasticsearch + * Repositories. + * + * @author Artur Konczak + * @author Mohsin Husen + * @see EnableElasticsearchRepositories + * @since 1.1.0 + */ +@Configuration +@ConditionalOnClass({ Client.class, ElasticsearchRepository.class }) +@ConditionalOnMissingBean(ElasticsearchRepositoryFactoryBean.class) +@Import(ElasticsearchRepositoriesAutoConfigureRegistrar.class) +public class ElasticsearchRepositoriesAutoConfiguration { + +} diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/ElasticsearchRepositoriesAutoConfigureRegistrar.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/ElasticsearchRepositoriesAutoConfigureRegistrar.java new file mode 100644 index 00000000000..6e9bf017323 --- /dev/null +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/ElasticsearchRepositoriesAutoConfigureRegistrar.java @@ -0,0 +1,57 @@ +/* + * 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.data; + +import java.lang.annotation.Annotation; + +import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; +import org.springframework.data.elasticsearch.repository.config.ElasticsearchRepositoryConfigExtension; +import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; +import org.springframework.data.repository.config.RepositoryConfigurationExtension; + +/** + * {@link ImportBeanDefinitionRegistrar} used to auto-configure Spring Data Elasticsearch + * Repositories. + * + * @author Artur Konczak + * @author Mohsin Husen + * @since 1.1.0 + */ +class ElasticsearchRepositoriesAutoConfigureRegistrar extends + AbstractRepositoryConfigurationSourceSupport { + + @Override + protected Class getAnnotation() { + return EnableElasticsearchRepositories.class; + } + + @Override + protected Class getConfiguration() { + return EnableElasticsearchRepositoriesConfiguration.class; + } + + @Override + protected RepositoryConfigurationExtension getRepositoryConfigurationExtension() { + return new ElasticsearchRepositoryConfigExtension(); + } + + @EnableElasticsearchRepositories + private static class EnableElasticsearchRepositoriesConfiguration { + + } + +} diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchAutoConfiguration.java new file mode 100644 index 00000000000..1a3dfe6948d --- /dev/null +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchAutoConfiguration.java @@ -0,0 +1,74 @@ +/* + * 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.elasticsearch; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.elasticsearch.client.Client; +import org.springframework.beans.factory.DisposableBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * {@link org.springframework.boot.autoconfigure.EnableAutoConfiguration + * Auto-configuration} for Elasticsearch. + * + * @author Artur Konczak + * @author Mohsin Husen + * @since 1.1.0 + */ +@Configuration +@ConditionalOnClass(Client.class) +@EnableConfigurationProperties(ElasticsearchProperties.class) +public class ElasticsearchAutoConfiguration implements DisposableBean { + + private static Log logger = LogFactory.getLog(ElasticsearchAutoConfiguration.class); + + @Autowired + private ElasticsearchProperties properties; + + private Client client; + + @Bean + public Client elasticsearchClient() { + this.client = this.properties.createClient(); + return this.client; + } + + @Override + public void destroy() throws Exception { + if (this.client != null) { + try { + if (logger.isInfoEnabled()) { + logger.info("Closing Elasticsearch client"); + } + if (this.client != null) { + this.client.close(); + } + } + catch (final Exception ex) { + if (logger.isErrorEnabled()) { + logger.error("Error closing Elasticsearch client: ", ex); + } + } + } + } + +} diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchDataAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchDataAutoConfiguration.java new file mode 100644 index 00000000000..e82d84cd3f5 --- /dev/null +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchDataAutoConfiguration.java @@ -0,0 +1,52 @@ +/* + * 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.elasticsearch; + +import org.elasticsearch.client.Client; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.elasticsearch.core.ElasticsearchTemplate; +import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for Spring Data's Elasticsearch + * support. + *

+ * Registers a {@link ElasticsearchTemplate} if no other bean of the same type is + * configured. + * + * @author Artur Konczak + * @author Mohsin Husen + * @see EnableElasticsearchRepositories + * @since 1.1.0 + */ +@Configuration +@ConditionalOnClass({ Client.class, ElasticsearchTemplate.class }) +@AutoConfigureAfter(ElasticsearchAutoConfiguration.class) +public class ElasticsearchDataAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + public ElasticsearchTemplate elasticsearchTemplate(Client client) { + return new ElasticsearchTemplate(client); + } + +} diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchProperties.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchProperties.java new file mode 100644 index 00000000000..bea364afcda --- /dev/null +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/elasticsearch/ElasticsearchProperties.java @@ -0,0 +1,82 @@ +/* + * 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.elasticsearch; + +import org.elasticsearch.client.Client; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.data.elasticsearch.client.NodeClientFactoryBean; +import org.springframework.data.elasticsearch.client.TransportClientFactoryBean; +import org.springframework.util.StringUtils; + +/** + * Configuration properties for Elasticsearch. + * + * @author Artur Konczak + * @author Mohsin Husen + * @since 1.1.0 + */ +@ConfigurationProperties(prefix = "spring.data.elasticsearch") +public class ElasticsearchProperties { + + private String clusterName = "elasticsearch"; + + private String clusterNodes; + + private boolean local = true; + + public String getClusterName() { + return this.clusterName; + } + + public void setClusterName(String clusterName) { + this.clusterName = clusterName; + } + + public String getClusterNodes() { + return this.clusterNodes; + } + + public void setClusterNodes(String clusterNodes) { + this.clusterNodes = clusterNodes; + } + + public Client createClient() { + try { + return (StringUtils.hasLength(this.clusterNodes) ? createTransportClient() + : createNodeClient()); + } + catch (Exception ex) { + throw new IllegalStateException(ex); + } + } + + private Client createNodeClient() throws Exception { + NodeClientFactoryBean factory = new NodeClientFactoryBean(this.local); + factory.setClusterName(this.clusterName); + factory.afterPropertiesSet(); + return factory.getObject(); + } + + private Client createTransportClient() throws Exception { + TransportClientFactoryBean factory = new TransportClientFactoryBean(); + factory.setClusterName(this.clusterName); + factory.setClusterNodes(this.clusterNodes); + factory.afterPropertiesSet(); + return factory.getObject(); + } + +} 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 1696504f293..1b87fe19577 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.data.ElasticsearchRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.JpaRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.MongoRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.SolrRepositoriesAutoConfiguration,\ @@ -22,6 +23,8 @@ org.springframework.boot.autoconfigure.jms.ActiveMQAutoConfiguration,\ org.springframework.boot.autoconfigure.jms.HornetQAutoConfiguration,\ org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration,\ org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration,\ +org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchAutoConfiguration,\ +org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchDataAutoConfiguration,\ org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration,\ org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration,\ org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration,\ diff --git a/spring-boot-dependencies/pom.xml b/spring-boot-dependencies/pom.xml index b4f776cbea2..b1cf30eee36 100644 --- a/spring-boot-dependencies/pom.xml +++ b/spring-boot-dependencies/pom.xml @@ -182,6 +182,11 @@ spring-boot-starter-batch 1.1.0.BUILD-SNAPSHOT + + org.springframework.boot + spring-boot-starter-data-elasticsearch + 1.1.0.BUILD-SNAPSHOT + org.springframework.boot spring-boot-starter-data-gemfire diff --git a/spring-boot-samples/pom.xml b/spring-boot-samples/pom.xml index 881c2e013d8..18e2cc5135d 100644 --- a/spring-boot-samples/pom.xml +++ b/spring-boot-samples/pom.xml @@ -27,6 +27,7 @@ spring-boot-sample-amqp spring-boot-sample-aop spring-boot-sample-batch + spring-boot-sample-data-elasticsearch spring-boot-sample-data-gemfire spring-boot-sample-data-jpa spring-boot-sample-data-mongodb diff --git a/spring-boot-samples/spring-boot-sample-data-elasticsearch/.gitignore b/spring-boot-samples/spring-boot-sample-data-elasticsearch/.gitignore new file mode 100644 index 00000000000..1269488f7fb --- /dev/null +++ b/spring-boot-samples/spring-boot-sample-data-elasticsearch/.gitignore @@ -0,0 +1 @@ +data diff --git a/spring-boot-samples/spring-boot-sample-data-elasticsearch/pom.xml b/spring-boot-samples/spring-boot-sample-data-elasticsearch/pom.xml new file mode 100644 index 00000000000..d4e76673cbd --- /dev/null +++ b/spring-boot-samples/spring-boot-sample-data-elasticsearch/pom.xml @@ -0,0 +1,39 @@ + + + 4.0.0 + + + org.springframework.boot + spring-boot-samples + 1.1.0.BUILD-SNAPSHOT + + spring-boot-sample-data-gemfire + jar + + ${basedir}/../.. + + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-data-elasticsearch + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + diff --git a/spring-boot-samples/spring-boot-sample-data-elasticsearch/src/main/java/sample/data/elasticsearch/Customer.java b/spring-boot-samples/spring-boot-sample-data-elasticsearch/src/main/java/sample/data/elasticsearch/Customer.java new file mode 100644 index 00000000000..2bfb6b81a5c --- /dev/null +++ b/spring-boot-samples/spring-boot-sample-data-elasticsearch/src/main/java/sample/data/elasticsearch/Customer.java @@ -0,0 +1,70 @@ +/* + * Copyright 2012-2013 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 sample.data.elasticsearch; + +import org.springframework.data.annotation.Id; +import org.springframework.data.elasticsearch.annotations.Document; + +@Document(indexName = "customer", type = "customer", shards = 1, replicas = 0, refreshInterval = "-1") +public class Customer { + + @Id + private String id; + + private String firstName; + + private String lastName; + + public Customer() { + } + + public Customer(String firstName, String lastName) { + this.firstName = firstName; + this.lastName = lastName; + } + + public String getId() { + return this.id; + } + + public void setId(String id) { + this.id = id; + } + + public String getFirstName() { + return this.firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return this.lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + @Override + public String toString() { + return String.format("Customer[id=%s, firstName='%s', lastName='%s']", this.id, + this.firstName, this.lastName); + } + +} diff --git a/spring-boot-samples/spring-boot-sample-data-elasticsearch/src/main/java/sample/data/elasticsearch/CustomerRepository.java b/spring-boot-samples/spring-boot-sample-data-elasticsearch/src/main/java/sample/data/elasticsearch/CustomerRepository.java new file mode 100644 index 00000000000..295768e7ec8 --- /dev/null +++ b/spring-boot-samples/spring-boot-sample-data-elasticsearch/src/main/java/sample/data/elasticsearch/CustomerRepository.java @@ -0,0 +1,29 @@ +/* + * Copyright 2012-2013 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 sample.data.elasticsearch; + +import java.util.List; + +import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; + +public interface CustomerRepository extends ElasticsearchRepository { + + public Customer findByFirstName(String firstName); + + public List findByLastName(String lastName); + +} diff --git a/spring-boot-samples/spring-boot-sample-data-elasticsearch/src/main/java/sample/data/elasticsearch/SampleElasticsearchApplication.java b/spring-boot-samples/spring-boot-sample-data-elasticsearch/src/main/java/sample/data/elasticsearch/SampleElasticsearchApplication.java new file mode 100644 index 00000000000..6cae86904f3 --- /dev/null +++ b/spring-boot-samples/spring-boot-sample-data-elasticsearch/src/main/java/sample/data/elasticsearch/SampleElasticsearchApplication.java @@ -0,0 +1,71 @@ +/* + * Copyright 2012-2013 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 sample.data.elasticsearch; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@EnableAutoConfiguration +@ComponentScan +public class SampleElasticsearchApplication implements CommandLineRunner { + + @Autowired + private CustomerRepository repository; + + @Override + public void run(String... args) throws Exception { + this.repository.deleteAll(); + saveCustomers(); + fetchAllCustomers(); + fetchIndividualCustomers(); + } + + private void saveCustomers() { + this.repository.save(new Customer("Alice", "Smith")); + this.repository.save(new Customer("Bob", "Smith")); + } + + private void fetchAllCustomers() { + System.out.println("Customers found with findAll():"); + System.out.println("-------------------------------"); + for (Customer customer : this.repository.findAll()) { + System.out.println(customer); + } + System.out.println(); + } + + private void fetchIndividualCustomers() { + System.out.println("Customer found with findByFirstName('Alice'):"); + System.out.println("--------------------------------"); + System.out.println(this.repository.findByFirstName("Alice")); + + System.out.println("Customers found with findByLastName('Smith'):"); + System.out.println("--------------------------------"); + for (Customer customer : this.repository.findByLastName("Smith")) { + System.out.println(customer); + } + } + + public static void main(String[] args) throws Exception { + SpringApplication.run(SampleElasticsearchApplication.class, "--debug"); + } +} diff --git a/spring-boot-samples/spring-boot-sample-data-elasticsearch/src/test/java/sample/data/elasticsearch/SampleElasticsearchApplicationTests.java b/spring-boot-samples/spring-boot-sample-data-elasticsearch/src/test/java/sample/data/elasticsearch/SampleElasticsearchApplicationTests.java new file mode 100644 index 00000000000..eb91dc4929d --- /dev/null +++ b/spring-boot-samples/spring-boot-sample-data-elasticsearch/src/test/java/sample/data/elasticsearch/SampleElasticsearchApplicationTests.java @@ -0,0 +1,66 @@ +/* + * 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 sample.data.elasticsearch; + +import static org.junit.Assert.*; + +import java.net.ConnectException; + +import org.junit.Rule; +import org.junit.Test; +import org.springframework.boot.test.OutputCapture; +import org.springframework.core.NestedCheckedException; + +/** + * Tests for {@link SampleElasticsearchApplication}. + * + * @author Artur Konczak + */ +public class SampleElasticsearchApplicationTests { + + @Rule + public OutputCapture outputCapture = new OutputCapture(); + + @Test + public void testDefaultSettings() throws Exception { + try { + SampleElasticsearchApplication.main(new String[0]); + } + catch (IllegalStateException ex) { + if (serverNotRunning(ex)) { + return; + } + } + String output = this.outputCapture.toString(); + assertTrue("Wrong output: " + output, + output.contains("firstName='Alice', lastName='Smith'")); + } + + private boolean serverNotRunning(IllegalStateException ex) { + @SuppressWarnings("serial") + NestedCheckedException nested = new NestedCheckedException("failed", ex) { + }; + if (nested.contains(ConnectException.class)) { + Throwable root = nested.getRootCause(); + if (root.getMessage().contains("Connection refused")) { + return true; + } + } + return false; + } + +} diff --git a/spring-boot-starters/pom.xml b/spring-boot-starters/pom.xml index 6d128af05ca..1b65ebd2cea 100644 --- a/spring-boot-starters/pom.xml +++ b/spring-boot-starters/pom.xml @@ -24,6 +24,7 @@ spring-boot-starter-amqp spring-boot-starter-aop spring-boot-starter-batch + spring-boot-starter-data-elasticsearch spring-boot-starter-data-gemfire spring-boot-starter-data-jpa spring-boot-starter-data-mongodb diff --git a/spring-boot-starters/spring-boot-starter-data-elasticsearch/pom.xml b/spring-boot-starters/spring-boot-starter-data-elasticsearch/pom.xml new file mode 100644 index 00000000000..c850a0c07ce --- /dev/null +++ b/spring-boot-starters/spring-boot-starter-data-elasticsearch/pom.xml @@ -0,0 +1,26 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starters + 1.1.0.BUILD-SNAPSHOT + + spring-boot-starter-data-elasticsearch + jar + + ${basedir}/../.. + + + + ${project.groupId} + spring-boot-starter + ${project.version} + + + org.springframework.data + spring-data-elasticsearch + + + diff --git a/spring-boot-starters/spring-boot-starter-data-elasticsearch/src/main/resources/META-INF/spring.provides b/spring-boot-starters/spring-boot-starter-data-elasticsearch/src/main/resources/META-INF/spring.provides new file mode 100644 index 00000000000..5ab75ebfdaf --- /dev/null +++ b/spring-boot-starters/spring-boot-starter-data-elasticsearch/src/main/resources/META-INF/spring.provides @@ -0,0 +1 @@ +provides: spring-data-elasticsearch