Spring Data Solr教程:配置

卢磊
2023-12-01

在我的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获得所需的依赖关系:

  1. 将Spring Milestone Maven存储库添加到POM文件。
  2. 将所需的依赖项添加到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文件:

  1. 将Spring Data Solr依赖性(版本1.0.0.RC1)添加到POM文件的依赖性部分。
  2. 将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:

  1. 创建一个属性文件。
  2. 配置嵌入式Solr服务器。
  3. 配置HTTP Solr服务器。
  4. 设置活动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服务器:

  1. 创建一个名为EmbeddedSolrContext的类,并使用@Configuration注释对该类进行注释。
  2. 通过使用@EnableSolrRepositories批注注释该类并配置我们的Solr信息库的根软件包,来启用Spring Data Solr信息库。
  3. @Profile注释注释创建的类,并将其值设置为'dev'。 这意味着除非激活了“ dev”配置文件,否则将忽略此配置类。
  4. @PropertySource批注注释该类,并将其值设置为'classpath:application.properties'。 这将配置属性文件的位置,并向Spring的Environment添加一个PropertySource
  5. 在类中添加一个Environment字段,并使用@Resource注释对该字段进行注释。 注入的环境用于访问我们添加到属性文件中的属性。
  6. 创建一个名为solrServerFactoryBean()方法和注释这种方法与@Bean注解。 此方法的实现创建一个新的EmbeddedSolrServerFactoryBean对象,设置Solr home的值并返回创建的对象。
  7. 创建一个名为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配置文件:

  1. 通过使用上下文名称空间的property-placeholder元素配置使用的属性文件。
  2. 启用S​​olr存储库并使用solr名称空间的repositories元素配置我们的Solr存储库的基本软件包。
  3. 为开发概要文件创建一个bean配置。
  4. 通过使用solr名称空间的Embedded-solr-server元素配置嵌入式Solr服务器Bean。 设置Solr主页的值。
  5. 配置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服务器:

  1. 创建一个名为HttpSolrContext的类,并使用@Configuration注释对该类进行注释。
  2. 通过使用@EnableSolrRepositories批注注释该类并配置我们的Solr信息库的根软件包,来启用Spring Data Solr信息库。
  3. @Profile注释注释创建的类,并将其值设置为'prod'。 这意味着除非激活了“ prod”配置文件,否则将忽略此配置类。
  4. @PropertySource批注注释该类,并将其值设置为'classpath:application.properties'。 这将配置属性文件的位置,并向Spring的Environment添加一个PropertySource
  5. 在类中添加一个Environment字段,并使用@Resource注释对该字段进行注释。 注入的环境用于访问我们添加到属性文件中的属性。
  6. 创建一个名为solrServerFactoryBean()方法和注释这种方法与@Bean注解。 此方法的实现创建一个新的HttpSolrServerFactoryBean对象,设置Solr服务器url的值并返回创建的对象。
  7. 创建一个名为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配置文件:

  1. 通过使用上下文名称空间的property-placeholder元素配置使用的属性文件。
  2. 启用S​​olr存储库并使用solr名称空间的repositories元素配置我们的Solr存储库的基本软件包。
  3. 为生产概要文件创建一个bean配置。
  4. 使用solr名称空间的solr-server元素配置HTTP Solr服务器Bean。 设置Solr服务器的URL。
  5. 配置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'。

通过执行以下步骤,我们可以将示例应用程序配置为支持两个概要文件:

  1. 将所需的配置文件添加到POM文件。
  2. 为系统属性创建特定于概要文件的属性文件。
  3. 配置Jetty Maven插件。

下面将更详细地描述这些步骤。

将所需的配置文件添加到POM文件

我们可以按照以下步骤将所需的配置文件添加到我们的Maven构建中:

  1. 创建开发环境的配置文件。 将此配置文件的ID设置为“ dev”,并将build.profile.id属性的值设置为“ dev”。
  2. 为生产环境创建配置文件。 将此配置文件的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属性的值匹配。

我们可以按照以下步骤为系统属性创建特定于概要文件的属性文件:

  1. profiles / dev目录中创建一个名为system.properties的属性文件。 此属性文件包含开发配置文件的系统属性。
  2. profiles / prod目录中创建一个名为system.properties的属性文件。 此属性文件包含生产概要文件的系统属性。

用于配置开发概要文件的系统属性的属性文件的内容如下所示:

spring.profiles.active=dev

用于配置生产概要文件的系统属性的属性文件的内容如下所示:

spring.profiles.active=prod

配置Jetty Maven插件

我们可以按照以下步骤配置Jetty Maven插件

  1. 将Jetty Maven插件的插件声明添加到我们Pom文件的插件部分。
  2. 配置Jetty Maven插件的stopKey和stopPort。
  3. 配置包含使用的系统属性的属性文件的位置。

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上提供了此博客条目的示例应用程序。

参考: Spring Data Solr教程: Petri Kainulainen博客上的JCG合作伙伴 Petri Kainulainen进行的配置

翻译自: https://www.javacodegeeks.com/2013/05/spring-data-solr-tutorial-configuration.html

 类似资料: