Статьи

Руководство по Spring Data Solr: настройка

В предыдущей части моего учебника Spring Data Solr мы узнали, что Solr предоставляет REST-подобный HTTP API, который можно использовать для добавления информации в индекс Solr и выполнения запросов к индексированным данным. Проблема в том, что запуск отдельного экземпляра Solr в среде разработки немного затруднителен.

Однако не вся надежда потеряна, потому что Solr предоставляет две альтернативные реализации сервера, которые мы можем использовать в наших приложениях. Эти реализации описаны ниже:

  • Встроенный сервер Solr подключается напрямую к ядру Solr. Мы можем использовать этот сервер в целях разработки, но мы также должны помнить, что

    использование его в производственной среде не рекомендуется . Тем не менее, использование встроенного сервера Solr все еще является жизнеспособным вариантом в среде разработки.

  • HTTP-сервер Solr подключается к внешнему серверу Solr по протоколу HTTP. Это рекомендуемый способ использования поискового сервера Solr, поэтому мы всегда должны использовать его в производственной среде.

Эта запись блога описывает, как мы можем получить необходимые зависимости с Maven. Мы также учимся настраивать Spring Data Solr для использования встроенного сервера Solr в среде разработки и сервера HTTP Solr в производственной среде.

Примечание . Эти записи блога предоставляют дополнительную информацию, которая помогает нам понять концепции, описанные в этой записи блога:

Давайте начнем.

Получение необходимых зависимостей с Maven

Мы можем получить необходимые зависимости с Maven, выполнив следующие действия:

  1. Добавьте репозиторий Spring Milestone Maven в файл POM.
  2. Добавьте необходимые зависимости в файл pom.xml.

Оба эти шага описаны более подробно ниже.

Добавление репозитория Spring Milestone Maven в файл POM

Мы можем добавить репозиторий Spring milestone Maven в наш POM-файл, добавив следующий XML-файл в файл pom.xml :

1
2
3
4
5
6
7
<repositories>
    <repository>
        <id>spring-milestone</id>
        <name>Spring Milestone Maven Repository</name>
    </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:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
<!-- 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. Установите активный профиль определения компонента.

Эти шаги описаны более подробно в следующих подразделах.

Создание файла свойств

Имя нашего файла свойств — application.properties, и мы будем использовать его для настройки двух свойств, которые описаны ниже:

  • Свойство solr.server.url указывает URL-адрес используемого сервера Solr. Значение этого свойства используется для настройки сервера HTTP Solr, который используется в производственной среде.
  • Solr.solr.home настраивает домашний каталог Solr. Значение этого свойства используется для настройки домашнего каталога встроенного сервера Solr, который используется в среде разработки.

Содержимое файла application.properties выглядит следующим образом:

1
2
solr.server.url=http://localhost:8983/solr/
solr.solr.home=

Настройка встроенного сервера Solr

В этом подразделе описывается, как мы можем настроить Spring Data Solr для использования встроенного сервера Solr в среде разработки.

Конфигурация Java

Мы можем создать класс конфигурации, который настраивает встроенный сервер Solr, выполнив следующие действия:

  1. Создайте класс с именем EmbeddedSolrContext и аннотируйте этот класс аннотацией @Configuration .
  2. Включите репозитории Spring Data Solr, пометив этот класс аннотацией @EnableSolrRepositories и сконфигурировав корневой пакет наших репозиториев Solr.
  3. Создайте аннотацию @Profile для созданного класса и установите для него значение «dev». Это означает, что этот класс конфигурации обойден, если профиль ‘dev’ не был активирован.
  4. Пометьте класс аннотацией @PropertySource и установите для него значение «classpath: application.properties». Это настраивает расположение нашего файла свойств и добавляет PropertySource в среду Spring.
  5. Добавьте поле Environment в класс и аннотируйте это поле аннотацией @Resource . Внедренная среда используется для доступа к свойствам, которые мы добавили в наш файл свойств.
  6. Создайте метод с именем solrServerFactoryBean () и аннотируйте этот метод аннотацией @Bean . Реализация этого метода создает новый объект EmbeddedSolrServerFactoryBean , устанавливает значение дома Solr и возвращает созданный объект.
  7. Создайте метод с именем solrTemplate () и аннотируйте этот метод аннотацией @Bean . Реализация этого метода создает новый объект SolrTemplate и передает используемую реализацию SolrServer в качестве аргумента конструктора.

Исходный код класса EmbeddedSolrContext выглядит следующим образом:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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

Мы можем создать файл конфигурации XML для встроенного сервера Solr, выполнив следующие действия:

  1. Сконфигурируйте используемый файл свойств, используя элемент property-placeholder пространства имен контекста .
  2. Включите репозитории Solr и настройте базовый пакет наших репозиториев Solr, используя элемент repositories пространства имен solr .
  3. Создайте конфигурацию компонента для профиля разработки.
  4. Сконфигурируйте встроенный bean-компонент Solr с помощью элемента embedded-solr-server пространства имен solr . Установите значение дома Solr.
  5. Настройте шаблонный компонент Solr. Установите сконфигурированный встроенный компонент сервера Solr в качестве аргумента конструктора.

Содержимое файла exampleApplicationContext-solr.xml выглядит следующим образом:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?xml version="1.0" encoding="UTF-8"?>
 
    <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. Включите репозитории Spring Data Solr, пометив этот класс аннотацией @EnableSolrRepositories и сконфигурировав корневой пакет наших репозиториев Solr.
  3. Аннотируйте созданный класс аннотацией @Profile и установите для него значение «prod». Это означает, что этот класс конфигурации обойден, если профиль ‘prod’ не был активирован.
  4. Пометьте класс аннотацией @PropertySource и установите для него значение «classpath: application.properties». Это настраивает расположение нашего файла свойств и добавляет PropertySource в среду Spring.
  5. Добавьте поле Environment в класс и аннотируйте это поле аннотацией @Resource . Внедренная среда используется для доступа к свойствам, которые мы добавили в наш файл свойств.
  6. Создайте метод с именем solrServerFactoryBean () и аннотируйте этот метод аннотацией @Bean . Реализация этого метода создает новый объект HttpSolrServerFactoryBean , устанавливает значение URL- адреса сервера Solr и возвращает созданный объект.
  7. Создайте метод с именем solrTemplate () и аннотируйте этот метод аннотацией @Bean . Реализация этого метода создает новый объект SolrTemplate и передает используемую реализацию SolrServer в качестве аргумента конструктора.

Исходный код класса HttpSolrContext выглядит следующим образом:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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

Мы можем создать файл конфигурации XML для сервера HTTP Solr, выполнив следующие действия:

  1. Сконфигурируйте используемый файл свойств, используя элемент property-placeholder пространства имен контекста .
  2. Включите репозитории Solr и настройте базовый пакет наших репозиториев Solr, используя элемент repositories пространства имен solr .
  3. Создайте конфигурацию компонента для производственного профиля.
  4. Настройте компонент сервера HTTP Solr с помощью элемента solr-server пространства имен solr . Установите URL сервера Solr.
  5. Настройте шаблонный компонент Solr. Установите в качестве аргумента конструктора настроенный компонент сервера HTTP Solr.

Содержимое файла exampleApplicationContext-solr.xml выглядит следующим образом:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?xml version="1.0" encoding="UTF-8"?>
 
    <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>

Настройка профиля определения активного компонента

Мы можем выбрать профиль определения активного компонента, установив значение системной переменной spring.profiles.active . Допустимые значения этой системной переменной (в контексте нашего примера приложения) описаны ниже:

  • Мы можем настроить наше приложение для запуска в профиле разработки, установив значение системной переменной spring.profiles.active в ‘dev’.
  • Когда мы хотим сконфигурировать наше приложение для запуска в производственном профиле, мы должны установить системную переменную spring.profiles.active в ‘prod’.

Мы можем настроить наше примерное приложение для поддержки обоих профилей, выполнив следующие действия:

  1. Добавьте необходимые профили в файл POM.
  2. Создайте файлы свойств профиля для системных свойств.
  3. Настройте плагин Jetty Maven.

Эти шаги описаны более подробно ниже.

Добавление необходимых профилей в файл POM

Мы можем добавить необходимые профили в нашу сборку Maven, выполнив следующие действия:

  1. Создать профиль для среды разработки. Установите для идентификатора этого профиля значение «dev» и установите для свойства build.profile.id значение «dev».
  2. Создайте профиль для производственной среды. Установите для идентификатора этого профиля значение «prod» и установите для свойства build.profile.id значение «prod».

Конфигурация наших профилей Maven выглядит следующим образом:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
<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>

Создание файлов свойств профиля для системных свойств

Файлы свойств, специфичные для профиля, находятся в подкаталогах каталога профилей . Имя каждого подкаталога совпадает со значениями свойств build.profile.id, настроенных в файле pom.xml .

Мы можем создать файлы свойств профиля для системных свойств, выполнив следующие действия:

  1. Создайте файл свойств с именем system.properties в каталоге profile / dev . Этот файл свойств содержит системные свойства профиля разработки.
  2. Создайте файл свойств с именем system.properties в каталоге profile / prod . Этот файл свойств содержит системные свойства рабочего профиля.

Содержимое файла свойств, используемого для настройки системных свойств профиля разработки, выглядит следующим образом:

1
spring.profiles.active=dev

Содержимое файла свойств, используемого для настройки системных свойств рабочего профиля, выглядит следующим образом:

1
spring.profiles.active=prod

Настройка подключаемого модуля Jetty Maven

Мы можем настроить плагин Jetty Maven , выполнив следующие действия:

  1. Добавьте объявление о плагине Jetty Maven в раздел плагинов нашего Pom-файла.
  2. Настройте stopKey и stopPort для подключаемого модуля Jetty Maven.
  3. Настройте расположение файла свойств, содержащего используемые системные свойства.

Конфигурация плагина Jetty Maven выглядит следующим образом:

01
02
03
04
05
06
07
08
09
10
<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 для создания различных конфигураций для среды разработки и производства.

Следующая часть моего учебника Spring Data Solr описывает, как мы можем добавить новый документ в индекс Solr, обновить информацию о существующих документах и ​​удалить документы из индекса Solr.

PS. Пример приложения этой записи в блоге доступен на Github .