Polish Spring Data Solr integration

This commit is contained in:
Andy Wilkinson
2014-05-22 08:45:41 +01:00
parent 6ed69709d7
commit e45ef06b56
13 changed files with 72 additions and 91 deletions

View File

@@ -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 {
}

View File

@@ -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();

View File

@@ -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());
}

View File

@@ -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) {

View File

@@ -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 {
}

View File

@@ -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();
}

View File

@@ -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) {

View File

@@ -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;