mirror of
https://github.com/spring-projects/spring-boot.git
synced 2024-08-29 03:06:45 +08:00
Polish Spring Data Solr integration
This commit is contained in:
parent
6ed69709d7
commit
e45ef06b56
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014 the original author or authors.
|
||||
* 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.
|
||||
@ -36,13 +36,14 @@ import org.springframework.data.solr.repository.support.SolrRepositoryFactoryBea
|
||||
* If active auto configuration does the same as
|
||||
* {@link org.springframework.data.solr.repository.config.EnableSolrRepositories} would
|
||||
* do.
|
||||
*
|
||||
*
|
||||
* @author Christoph Strobl
|
||||
* @since 1.1.0
|
||||
*/
|
||||
@Configuration
|
||||
@ConditionalOnClass({ SolrServer.class, SolrRepository.class })
|
||||
@ConditionalOnMissingBean(SolrRepositoryFactoryBean.class)
|
||||
@Import(SolrRepositoriesAutoConfigureRegstrar.class)
|
||||
@Import(SolrRepositoriesAutoConfigureRegistrar.class)
|
||||
public class SolrRepositoriesAutoConfiguration {
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014 the original author or authors.
|
||||
* 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.
|
||||
@ -26,40 +26,23 @@ import org.springframework.data.solr.repository.config.SolrRepositoryConfigExten
|
||||
/**
|
||||
* {@link ImportBeanDefinitionRegistrar} used to auto-configure Spring Data Solr
|
||||
* repositories.
|
||||
*
|
||||
*
|
||||
* @author Christoph Strobl
|
||||
* @since 1.1.0
|
||||
*/
|
||||
public class SolrRepositoriesAutoConfigureRegstrar extends
|
||||
public class SolrRepositoriesAutoConfigureRegistrar extends
|
||||
AbstractRepositoryConfigurationSourceSupport {
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.springframework.boot.autoconfigure.data.
|
||||
* AbstractRepositoryConfigurationSourceSupport#getAnnotation()
|
||||
*/
|
||||
@Override
|
||||
protected Class<? extends Annotation> getAnnotation() {
|
||||
return EnableSolrRepositories.class;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.springframework.boot.autoconfigure.data.
|
||||
* AbstractRepositoryConfigurationSourceSupport#getConfiguration()
|
||||
*/
|
||||
@Override
|
||||
protected Class<?> getConfiguration() {
|
||||
return EnableSolrRepositoriesConfiguration.class;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.springframework.boot.autoconfigure.data.
|
||||
* AbstractRepositoryConfigurationSourceSupport#getRepositoryConfigurationExtension()
|
||||
*/
|
||||
@Override
|
||||
protected RepositoryConfigurationExtension getRepositoryConfigurationExtension() {
|
||||
return new SolrRepositoryConfigExtension();
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014 the original author or authors.
|
||||
* 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.
|
||||
@ -22,6 +22,7 @@ import org.apache.solr.client.solrj.SolrServer;
|
||||
import org.apache.solr.client.solrj.impl.CloudSolrServer;
|
||||
import org.apache.solr.client.solrj.impl.HttpSolrServer;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
@ -30,16 +31,18 @@ import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
* Enables auto configuration for Solr.
|
||||
*
|
||||
* {@link EnableAutoConfiguration Auto-configuration} for Solr
|
||||
*
|
||||
* @author Christoph Strobl
|
||||
* @since 1.1.0
|
||||
*/
|
||||
@Configuration
|
||||
@ConditionalOnClass(SolrServer.class)
|
||||
@EnableConfigurationProperties(SolrProperties.class)
|
||||
public class SolrAutoConfiguration {
|
||||
|
||||
private @Autowired SolrProperties properties;
|
||||
@Autowired
|
||||
private SolrProperties properties;
|
||||
|
||||
private SolrServer solrServer;
|
||||
|
||||
@ -53,13 +56,11 @@ public class SolrAutoConfiguration {
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
public SolrServer solrServer() {
|
||||
|
||||
this.solrServer = createSolrServer();
|
||||
return this.solrServer;
|
||||
}
|
||||
|
||||
private SolrServer createSolrServer() {
|
||||
|
||||
if (StringUtils.hasText(this.properties.getZkHost())) {
|
||||
return new CloudSolrServer(this.properties.getZkHost());
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014 the original author or authors.
|
||||
* 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.
|
||||
@ -20,8 +20,9 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
|
||||
/**
|
||||
* Configuration properties for Solr.
|
||||
*
|
||||
*
|
||||
* @author Christoph Strobl
|
||||
* @since 1.1.0
|
||||
*/
|
||||
@ConfigurationProperties(prefix = "spring.data.solr")
|
||||
public class SolrProperties {
|
||||
@ -31,7 +32,7 @@ public class SolrProperties {
|
||||
private String zkHost;
|
||||
|
||||
public String getHost() {
|
||||
return host;
|
||||
return this.host;
|
||||
}
|
||||
|
||||
public void setHost(String host) {
|
||||
@ -39,7 +40,7 @@ public class SolrProperties {
|
||||
}
|
||||
|
||||
public String getZkHost() {
|
||||
return zkHost;
|
||||
return this.zkHost;
|
||||
}
|
||||
|
||||
public void setZkHost(String zkHost) {
|
||||
|
@ -38,7 +38,7 @@ import static org.junit.Assert.assertNotNull;
|
||||
|
||||
/**
|
||||
* Tests for {@link JpaRepositoriesAutoConfiguration}.
|
||||
*
|
||||
*
|
||||
* @author Dave Syer
|
||||
* @author Oliver Gierke
|
||||
*/
|
||||
@ -83,9 +83,9 @@ public class JpaRepositoriesAutoConfigurationTests {
|
||||
|
||||
@Configuration
|
||||
@EnableJpaRepositories(basePackageClasses = org.springframework.boot.autoconfigure.data.alt.CityJpaRepository.class, excludeFilters = {
|
||||
@Filter(type = FilterType.ASSIGNABLE_TYPE, value = CityMongoDbRepository.class),
|
||||
@Filter(type = FilterType.ASSIGNABLE_TYPE, value = CitySolrRepository.class) })
|
||||
@TestAutoConfigurationPackage(City.class)
|
||||
@Filter(type = FilterType.ASSIGNABLE_TYPE, value = CityMongoDbRepository.class),
|
||||
@Filter(type = FilterType.ASSIGNABLE_TYPE, value = CitySolrRepository.class) })
|
||||
@TestAutoConfigurationPackage(City.class)
|
||||
protected static class CustomConfiguration {
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014 the original author or authors.
|
||||
* 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.
|
||||
@ -15,10 +15,6 @@
|
||||
*/
|
||||
package org.springframework.boot.autoconfigure.data;
|
||||
|
||||
import static org.hamcrest.core.IsInstanceOf.*;
|
||||
import static org.hamcrest.core.IsNull.*;
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import org.apache.solr.client.solrj.SolrServer;
|
||||
import org.apache.solr.client.solrj.impl.HttpSolrServer;
|
||||
import org.junit.Test;
|
||||
@ -32,7 +28,13 @@ import org.springframework.context.annotation.AnnotationConfigApplicationContext
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.data.solr.repository.config.EnableSolrRepositories;
|
||||
|
||||
import static org.hamcrest.core.IsInstanceOf.instanceOf;
|
||||
import static org.hamcrest.core.IsNull.notNullValue;
|
||||
import static org.junit.Assert.assertThat;
|
||||
|
||||
/**
|
||||
* Tests for {@link SolrRepositoriesAutoConfiguration}
|
||||
*
|
||||
* @author Christoph Strobl
|
||||
*/
|
||||
public class SolrRepositoriesAutoConfigurationTests {
|
||||
@ -41,23 +43,22 @@ public class SolrRepositoriesAutoConfigurationTests {
|
||||
|
||||
@Test
|
||||
public void testDefaultRepositoryConfiguration() {
|
||||
|
||||
initContext(TestConfiguration.class);
|
||||
|
||||
assertThat(this.context.getBean(CityRepository.class), notNullValue());
|
||||
assertThat(this.context.getBean(SolrServer.class), instanceOf(HttpSolrServer.class));
|
||||
assertThat(this.context.getBean(SolrServer.class),
|
||||
instanceOf(HttpSolrServer.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNoRepositoryConfiguration() {
|
||||
|
||||
initContext(EmptyConfiguration.class);
|
||||
assertThat(this.context.getBean(SolrServer.class), instanceOf(HttpSolrServer.class));
|
||||
assertThat(this.context.getBean(SolrServer.class),
|
||||
instanceOf(HttpSolrServer.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void doesNotTriggerDefaultRepositoryDetectionIfCustomized() {
|
||||
|
||||
initContext(CustomizedConfiguration.class);
|
||||
assertThat(this.context.getBean(CitySolrRepository.class), notNullValue());
|
||||
}
|
||||
@ -65,7 +66,8 @@ public class SolrRepositoriesAutoConfigurationTests {
|
||||
private void initContext(Class<?> configClass) {
|
||||
|
||||
this.context = new AnnotationConfigApplicationContext();
|
||||
this.context.register(configClass, SolrAutoConfiguration.class, SolrRepositoriesAutoConfiguration.class,
|
||||
this.context.register(configClass, SolrAutoConfiguration.class,
|
||||
SolrRepositoriesAutoConfiguration.class,
|
||||
PropertyPlaceholderAutoConfiguration.class);
|
||||
this.context.refresh();
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014 the original author or authors.
|
||||
* 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.
|
||||
@ -13,6 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.autoconfigure.data.solr;
|
||||
|
||||
import org.springframework.data.annotation.Id;
|
||||
@ -29,7 +30,7 @@ public class City {
|
||||
private @Indexed String name;
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
return this.id;
|
||||
}
|
||||
|
||||
public void setId(String id) {
|
||||
@ -37,7 +38,7 @@ public class City {
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014 the original author or authors.
|
||||
* 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.
|
||||
@ -13,6 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.autoconfigure.data.solr;
|
||||
|
||||
import org.springframework.data.domain.Page;
|
||||
|
@ -192,6 +192,11 @@
|
||||
<artifactId>spring-boot-starter-data-rest</artifactId>
|
||||
<version>1.1.0.BUILD-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-data-solr</artifactId>
|
||||
<version>1.1.0.BUILD-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-freemarker</artifactId>
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014 the original author or authors.
|
||||
* 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.
|
||||
@ -23,9 +23,6 @@ import org.springframework.data.annotation.Id;
|
||||
import org.springframework.data.solr.core.geo.Point;
|
||||
import org.springframework.data.solr.core.mapping.SolrDocument;
|
||||
|
||||
/**
|
||||
* @author Christoph Strobl
|
||||
*/
|
||||
@SolrDocument(solrCoreName = "collection1")
|
||||
public class Product {
|
||||
|
||||
@ -55,7 +52,7 @@ public class Product {
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
return this.id;
|
||||
}
|
||||
|
||||
public void setId(String id) {
|
||||
@ -63,7 +60,7 @@ public class Product {
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
@ -71,7 +68,7 @@ public class Product {
|
||||
}
|
||||
|
||||
public Double getPrice() {
|
||||
return price;
|
||||
return this.price;
|
||||
}
|
||||
|
||||
public void setPrice(Double price) {
|
||||
@ -79,7 +76,7 @@ public class Product {
|
||||
}
|
||||
|
||||
public List<String> getCategory() {
|
||||
return category;
|
||||
return this.category;
|
||||
}
|
||||
|
||||
public void setCategory(List<String> category) {
|
||||
@ -87,7 +84,7 @@ public class Product {
|
||||
}
|
||||
|
||||
public Point getLocation() {
|
||||
return location;
|
||||
return this.location;
|
||||
}
|
||||
|
||||
public void setLocation(Point location) {
|
||||
@ -96,8 +93,8 @@ public class Product {
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Product [id=" + id + ", name=" + name + ", price=" + price
|
||||
+ ", category=" + category + ", location=" + location + "]";
|
||||
return "Product [id=" + this.id + ", name=" + this.name + ", price=" + this.price
|
||||
+ ", category=" + this.category + ", location=" + this.location + "]";
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014 the original author or authors.
|
||||
* 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.
|
||||
@ -20,9 +20,6 @@ import java.util.List;
|
||||
|
||||
import org.springframework.data.solr.repository.SolrCrudRepository;
|
||||
|
||||
/**
|
||||
* @author Christoph Strobl
|
||||
*/
|
||||
public interface ProductRepository extends SolrCrudRepository<Product, String> {
|
||||
|
||||
List<Product> findByNameStartingWith(String name);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014 the original author or authors.
|
||||
* 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.
|
||||
@ -23,9 +23,6 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
/**
|
||||
* @author Christoph Strobl
|
||||
*/
|
||||
@Configuration
|
||||
@EnableAutoConfiguration
|
||||
@ComponentScan
|
||||
@ -37,17 +34,17 @@ public class SampleSolrApplication implements CommandLineRunner {
|
||||
@Override
|
||||
public void run(String... args) throws Exception {
|
||||
|
||||
repository.deleteAll();
|
||||
this.repository.deleteAll();
|
||||
|
||||
// insert some products
|
||||
repository.save(new Product("1", "Nintendo Entertainment System"));
|
||||
repository.save(new Product("2", "Sega Megadrive"));
|
||||
repository.save(new Product("3", "Sony Playstation"));
|
||||
this.repository.save(new Product("1", "Nintendo Entertainment System"));
|
||||
this.repository.save(new Product("2", "Sega Megadrive"));
|
||||
this.repository.save(new Product("3", "Sony Playstation"));
|
||||
|
||||
// fetch all
|
||||
System.out.println("Products found by findAll():");
|
||||
System.out.println("----------------------------");
|
||||
for (Product product : repository.findAll()) {
|
||||
for (Product product : this.repository.findAll()) {
|
||||
System.out.println(product);
|
||||
}
|
||||
System.out.println();
|
||||
@ -55,7 +52,7 @@ public class SampleSolrApplication implements CommandLineRunner {
|
||||
// fetch a single product
|
||||
System.out.println("Products founds with findByNameStartingWith('So'):");
|
||||
System.out.println("--------------------------------");
|
||||
for (Product product : repository.findByNameStartingWith("So")) {
|
||||
for (Product product : this.repository.findByNameStartingWith("So")) {
|
||||
System.out.println(product);
|
||||
}
|
||||
System.out.println();
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014 the original author or authors.
|
||||
* 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.
|
||||
@ -16,17 +16,13 @@
|
||||
|
||||
package sample.data.solr;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import org.apache.solr.client.solrj.SolrServerException;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.springframework.boot.test.OutputCapture;
|
||||
import org.springframework.core.NestedCheckedException;
|
||||
|
||||
/**
|
||||
* @author Christoph Strobl
|
||||
*/
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
public class SampleSolrApplicationTests {
|
||||
|
||||
@Rule
|
||||
@ -37,7 +33,8 @@ public class SampleSolrApplicationTests {
|
||||
|
||||
try {
|
||||
SampleSolrApplication.main(new String[0]);
|
||||
} catch (IllegalStateException ex) {
|
||||
}
|
||||
catch (IllegalStateException ex) {
|
||||
if (serverNotRunning(ex)) {
|
||||
return;
|
||||
}
|
||||
@ -51,11 +48,9 @@ public class SampleSolrApplicationTests {
|
||||
@SuppressWarnings("serial")
|
||||
NestedCheckedException nested = new NestedCheckedException("failed", ex) {
|
||||
};
|
||||
if (nested.contains(SolrServerException.class)) {
|
||||
Throwable root = nested.getRootCause();
|
||||
if (root.getMessage().contains("Connection refused")) {
|
||||
return true;
|
||||
}
|
||||
Throwable root = nested.getRootCause();
|
||||
if (root.getMessage().contains("Connection refused")) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user