在我的Spring Data Solr教程的上一部分中,我们了解到Solr提供了一个类似REST的HTTP API,该API可用于向Solr索引添加信息并针对索引数据执行查询。 问题在于,在开发环境中运行单独的Solr实例有点麻烦。
但是,并非所有希望都因此而丧失,因为Solr提供了两个可供我们在应用程序中使用的替代服务器实现。 这些实现如下所述:
- 嵌入式Solr服务器直接连接到Solr核心。 我们可以将此服务器用于开发目的,但我们还必须记住
不建议在生产环境中使用它 。 但是,在开发环境中,使用嵌入式Solr服务器仍然是可行的选择。 - HTTP Solr服务器通过使用HTTP连接到外部Solr服务器。 这是推荐使用Solr搜索服务器的方式,这就是为什么我们应该始终在生产环境中使用它的原因。
此博客文章描述了如何使用Maven获得所需的依赖关系。 我们还将学习配置Spring Data Solr以在开发环境中使用嵌入式Solr服务器,在生产环境中使用HTTP Solr服务器。
注意 :这些博客条目提供了其他信息,可以帮助我们理解此博客条目中描述的概念:
让我们开始吧。
使用Maven获取所需的依赖关系
通过执行以下步骤,我们可以使用Maven获得所需的依赖关系:
- 将Spring Milestone Maven存储库添加到POM文件。
- 将所需的依赖项添加到pom.xml文件。
下面将更详细地描述这两个步骤。
将Spring Milestone Maven存储库添加到POM文件
通过将以下XML添加到pom.xml文件中,我们可以将Spring里程碑Maven存储库添加到我们的POM文件中:
<repositories>
<repository>
<id>spring-milestone</id>
<name>Spring Milestone Maven Repository</name>
<url>http://repo.springsource.org/libs-milestone</url>
</repository>
</repositories>
将所需依赖项添加到POM文件
我们可以按照以下步骤将所需的依赖项添加到POM文件:
- 将Spring Data Solr依赖性(版本1.0.0.RC1)添加到POM文件的依赖性部分。
- 将Solr核心依赖关系(版本4.1.0)添加到POM文件的依赖关系部分,并排除SLF4J JDK14绑定。 因为嵌入式Solr服务器需要Solr核心,所以如果我们不使用嵌入式Solr服务器,则可以跳过此步骤。
我们可以通过将以下XML添加到POM文件的“依赖关系”部分来完成这些步骤:
<!-- Spring Data Solr -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-solr</artifactId>
<version>1.0.0.RC1</version>
</dependency>
<!-- Required by embedded solr server -->
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-core</artifactId>
<version>4.1.0</version>
<exclusions>
<exclusion>
<artifactId>slf4j-jdk14</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
配置Spring Data Solr
本节描述了我们如何配置Spring Data Solr以在开发和生产环境中使用不同的Solr服务器。 我们将在开发环境中使用嵌入式Solr服务器,在生产环境中使用HTTP Solr服务器。
我们可以按照以下步骤配置Spring Data Solr:
- 创建一个属性文件。
- 配置嵌入式Solr服务器。
- 配置HTTP Solr服务器。
- 设置活动bean定义概要文件。
在以下小节中将更详细地描述这些步骤。
创建属性文件
我们的属性文件的名称为application.properties ,我们将使用它来配置两个属性,如下所述:
- solr.server.url属性指定使用的Solr服务器的URL。 此属性的值用于配置在生产环境中使用的HTTP Solr服务器。
- solr.solr.home配置Solr的主目录。 此属性的值用于配置开发环境中使用的嵌入式Solr服务器的主目录。
application.properties文件的内容如下所示:
solr.server.url=http://localhost:8983/solr/
solr.solr.home=
配置嵌入式Solr服务器
本小节描述了如何在开发环境中配置Spring Data Solr以使用嵌入式Solr服务器。
Java配置
我们可以按照以下步骤创建一个配置类来配置嵌入式Solr服务器:
- 创建一个名为EmbeddedSolrContext的类,并使用@Configuration注释对该类进行注释。
- 通过使用@EnableSolrRepositories批注注释该类并配置我们的Solr信息库的根软件包,来启用Spring Data Solr信息库。
- 用@Profile注释注释创建的类,并将其值设置为'dev'。 这意味着除非激活了“ dev”配置文件,否则将忽略此配置类。
- 用@PropertySource批注注释该类,并将其值设置为'classpath:application.properties'。 这将配置属性文件的位置,并向Spring的Environment添加一个PropertySource 。
- 在类中添加一个Environment字段,并使用@Resource注释对该字段进行注释。 注入的环境用于访问我们添加到属性文件中的属性。
- 创建一个名为solrServerFactoryBean()方法和注释这种方法与@Bean注解。 此方法的实现创建一个新的EmbeddedSolrServerFactoryBean对象,设置Solr home的值并返回创建的对象。
- 创建一个名为solrTemplate()方法和注释这种方法与@Bean注解。 这种方法的实现创建一个新的SolrTemplate对象,并将所使用的SolrServer执行作为构造器参数。
EmbeddedSolrContext类的源代码如下所示:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.core.env.Environment;
import org.springframework.data.solr.core.SolrTemplate;
import org.springframework.data.solr.repository.config.EnableSolrRepositories;
import org.springframework.data.solr.server.support.EmbeddedSolrServerFactoryBean;
import javax.annotation.Resource;
@Configuration
@EnableSolrRepositories("net.petrikainulainen.spring.datasolr.todo.repository.solr")
@Profile("dev")
@PropertySource("classpath:application.properties")
public class EmbeddedSolrContext {
@Resource
private Environment environment;
@Bean
public EmbeddedSolrServerFactoryBean solrServerFactoryBean() {
EmbeddedSolrServerFactoryBean factory = new EmbeddedSolrServerFactoryBean();
factory.setSolrHome(environment.getRequiredProperty("solr.solr.home"));
return factory;
}
@Bean
public SolrTemplate solrTemplate() throws Exception {
return new SolrTemplate(solrServerFactoryBean().getObject());
}
}
XML配置
通过执行以下步骤,我们可以为嵌入式Solr服务器创建XML配置文件:
- 通过使用上下文名称空间的property-placeholder元素配置使用的属性文件。
- 启用Solr存储库并使用solr名称空间的repositories元素配置我们的Solr存储库的基本软件包。
- 为开发概要文件创建一个bean配置。
- 通过使用solr名称空间的Embedded-solr-server元素配置嵌入式Solr服务器Bean。 设置Solr主页的值。
- 配置Solr模板bean。 将配置的嵌入式Solr服务器bean设置为构造函数参数。
exampleApplicationContext-solr.xml文件的内容如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:solr="http://www.springframework.org/schema/data/solr"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/data/solr http://www.springframework.org/schema/data/solr/spring-solr.xsd">
<context:property-placeholder location="classpath:application.properties"/>
<!-- Enable Solr repositories and configure repository base package -->
<solr:repositories base-package="net.petrikainulainen.spring.datasolr.todo.repository.solr"/>
<!-- Bean definitions for the dev profile -->
<beans profile="dev">
<!-- Configures embedded Solr server -->
<solr:embedded-solr-server id="solrServer" solrHome="${solr.solr.home}"/>
<!-- Configures Solr template -->
<bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate">
<constructor-arg index="0" ref="solrServer"/>
</bean>
</beans>
<!-- Bean definitions for the prod profile are omitted -->
</beans>
配置Http Solr服务器
本小节描述了如何配置Spring Data Solr以在生产环境中使用HTTP Solr服务器。
Java配置
我们可以按照以下步骤创建一个配置类来配置HTTP Solr服务器:
- 创建一个名为HttpSolrContext的类,并使用@Configuration注释对该类进行注释。
- 通过使用@EnableSolrRepositories批注注释该类并配置我们的Solr信息库的根软件包,来启用Spring Data Solr信息库。
- 用@Profile注释注释创建的类,并将其值设置为'prod'。 这意味着除非激活了“ prod”配置文件,否则将忽略此配置类。
- 用@PropertySource批注注释该类,并将其值设置为'classpath:application.properties'。 这将配置属性文件的位置,并向Spring的Environment添加一个PropertySource 。
- 在类中添加一个Environment字段,并使用@Resource注释对该字段进行注释。 注入的环境用于访问我们添加到属性文件中的属性。
- 创建一个名为solrServerFactoryBean()方法和注释这种方法与@Bean注解。 此方法的实现创建一个新的HttpSolrServerFactoryBean对象,设置Solr服务器url的值并返回创建的对象。
- 创建一个名为solrTemplate()方法和注释这种方法与@Bean注解。 这种方法的实现创建一个新的SolrTemplate对象,并将所使用的SolrServer执行作为构造器参数。
HttpSolrContext类的源代码如下所示:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.core.env.Environment;
import org.springframework.data.solr.core.SolrTemplate;
import org.springframework.data.solr.repository.config.EnableSolrRepositories;
import org.springframework.data.solr.server.support.HttpSolrServerFactoryBean;
import javax.annotation.Resource;
@Configuration
@EnableSolrRepositories("net.petrikainulainen.spring.datasolr.todo.repository.solr")
@Profile("prod")
@PropertySource("classpath:application.properties")
public class HttpSolrContext {
@Resource
private Environment environment;
@Bean
public HttpSolrServerFactoryBean solrServerFactoryBean() {
HttpSolrServerFactoryBean factory = new HttpSolrServerFactoryBean();
factory.setUrl(environment.getRequiredProperty("solr.server.url"));
return factory;
}
@Bean
public SolrTemplate solrTemplate() throws Exception {
return new SolrTemplate(solrServerFactoryBean().getObject());
}
}
XML配置
通过执行以下步骤,我们可以为HTTP Solr服务器创建XML配置文件:
- 通过使用上下文名称空间的property-placeholder元素配置使用的属性文件。
- 启用Solr存储库并使用solr名称空间的repositories元素配置我们的Solr存储库的基本软件包。
- 为生产概要文件创建一个bean配置。
- 使用solr名称空间的solr-server元素配置HTTP Solr服务器Bean。 设置Solr服务器的URL。
- 配置Solr模板bean。 将配置的HTTP Solr服务器bean设置为构造函数参数。
exampleApplicationContext-solr.xml文件的内容如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:solr="http://www.springframework.org/schema/data/solr"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/data/solr http://www.springframework.org/schema/data/solr/spring-solr.xsd">
<context:property-placeholder location="classpath:application.properties"/>
<!-- Enable Solr repositories and configure repository base package -->
<solr:repositories base-package="net.petrikainulainen.spring.datasolr.todo.repository.solr"/>
<!-- Bean definitions for the dev profile are omitted -->
<!-- Bean definitions for the prod profile -->
<beans profile="prod">
<!-- Configures HTTP Solr server -->
<solr:solr-server id="solrServer" url="${solr.server.url}"/>
<!-- Configures Solr template -->
<bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate">
<constructor-arg index="0" ref="solrServer"/>
</bean>
</beans>
</beans>
设置活动Bean定义配置文件
我们可以通过设置spring.profiles.active系统变量的值来选择活动bean定义概要文件。 下面描述了该系统变量的允许值(在示例应用程序的上下文中):
- 通过将spring.profiles.active系统变量的值设置为'dev',我们可以配置我们的应用程序使其在开发配置文件中运行。
- 当我们想要配置我们的应用程序以在生产配置文件中运行时,我们必须将spring.profiles.active系统变量的设置为'prod'。
通过执行以下步骤,我们可以将示例应用程序配置为支持两个概要文件:
- 将所需的配置文件添加到POM文件。
- 为系统属性创建特定于概要文件的属性文件。
- 配置Jetty Maven插件。
下面将更详细地描述这些步骤。
将所需的配置文件添加到POM文件
我们可以按照以下步骤将所需的配置文件添加到我们的Maven构建中:
- 创建开发环境的配置文件。 将此配置文件的ID设置为“ dev”,并将build.profile.id属性的值设置为“ dev”。
- 为生产环境创建配置文件。 将此配置文件的ID设置为“ prod”,并将build.profile.id属性的值设置为“ prod”。
我们的Maven配置文件的配置如下所示:
<profiles>
<profile>
<id>dev</id>
<properties>
<build.profile.id>dev</build.profile.id>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<build.profile.id>prod</build.profile.id>
</properties>
</profile>
</profiles>
为系统属性创建特定于配置文件的属性文件
特定于个人档案的属性文件位于个人档案目录的子目录中。 每个子目录的名称都与pom.xml文件中配置的build.profile.id属性的值匹配。
我们可以按照以下步骤为系统属性创建特定于概要文件的属性文件:
- 在profiles / dev目录中创建一个名为system.properties的属性文件。 此属性文件包含开发配置文件的系统属性。
- 在profiles / prod目录中创建一个名为system.properties的属性文件。 此属性文件包含生产概要文件的系统属性。
用于配置开发概要文件的系统属性的属性文件的内容如下所示:
spring.profiles.active=dev
用于配置生产概要文件的系统属性的属性文件的内容如下所示:
spring.profiles.active=prod
配置Jetty Maven插件
我们可以按照以下步骤配置Jetty Maven插件 :
- 将Jetty Maven插件的插件声明添加到我们Pom文件的插件部分。
- 配置Jetty Maven插件的stopKey和stopPort。
- 配置包含使用的系统属性的属性文件的位置。
Jetty Maven插件的配置如下所示:
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>8.1.5.v20120716</version>
<configuration>
<stopKey>todostop</stopKey>
<stopPort>9999</stopPort>
<systemPropertiesFile>${project.basedir}/profiles/${build.profile.id}/system.properties</systemPropertiesFile>
</configuration>
</plugin>
摘要
现在,我们已经使用Maven成功地获得了必需的依赖关系,并配置了Spring Data Solr。 这篇博客文章教会了我们四件事:
- 我们学会了使用Maven获得所需的依赖关系。
- 我们知道我们仅应在开发环境中使用嵌入式Solr服务器,并了解了如何配置Spring Data Solr以使用它。
- 我们了解到,我们应该始终在生产环境中使用HTTP Solr服务器,并且知道如何配置Spring Data Solr以使用它。
- 我们知道如何使用Spring Framework的bean定义配置文件为开发和生产环境创建不同的配置。
我的Spring Data Solr教程的下一部分描述了如何向Solr索引添加新文档,如何更新现有文档的信息以及从Solr索引删除文档。
PS。 Github上提供了此博客条目的示例应用程序。
翻译自: https://www.javacodegeeks.com/2013/05/spring-data-solr-tutorial-configuration.html