В предыдущей части моего учебника 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, выполнив следующие действия:
- Добавьте репозиторий Spring Milestone Maven в файл POM.
- Добавьте необходимые зависимости в файл 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, выполнив следующие действия:
- Добавьте зависимость Spring Data Solr (версия 1.0.0.RC1) в раздел зависимостей нашего файла POM.
- Добавьте ядро зависимости 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, выполнив следующие действия:
- Создайте файл свойств.
- Настройте встроенный сервер Solr.
- Настройте сервер HTTP Solr.
- Установите активный профиль определения компонента.
Эти шаги описаны более подробно в следующих подразделах.
Создание файла свойств
Имя нашего файла свойств — 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, выполнив следующие действия:
- Создайте класс с именем EmbeddedSolrContext и аннотируйте этот класс аннотацией @Configuration .
- Включите репозитории Spring Data Solr, пометив этот класс аннотацией @EnableSolrRepositories и сконфигурировав корневой пакет наших репозиториев Solr.
- Создайте аннотацию @Profile для созданного класса и установите для него значение «dev». Это означает, что этот класс конфигурации обойден, если профиль ‘dev’ не был активирован.
- Пометьте класс аннотацией @PropertySource и установите для него значение «classpath: application.properties». Это настраивает расположение нашего файла свойств и добавляет PropertySource в среду Spring.
- Добавьте поле Environment в класс и аннотируйте это поле аннотацией @Resource . Внедренная среда используется для доступа к свойствам, которые мы добавили в наш файл свойств.
- Создайте метод с именем solrServerFactoryBean () и аннотируйте этот метод аннотацией @Bean . Реализация этого метода создает новый объект EmbeddedSolrServerFactoryBean , устанавливает значение дома Solr и возвращает созданный объект.
- Создайте метод с именем 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, выполнив следующие действия:
- Сконфигурируйте используемый файл свойств, используя элемент property-placeholder пространства имен контекста .
- Включите репозитории Solr и настройте базовый пакет наших репозиториев Solr, используя элемент repositories пространства имен solr .
- Создайте конфигурацию компонента для профиля разработки.
- Сконфигурируйте встроенный bean-компонент Solr с помощью элемента embedded-solr-server пространства имен solr . Установите значение дома Solr.
- Настройте шаблонный компонент 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" ?> 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 .
- Включите репозитории Spring Data Solr, пометив этот класс аннотацией @EnableSolrRepositories и сконфигурировав корневой пакет наших репозиториев Solr.
- Аннотируйте созданный класс аннотацией @Profile и установите для него значение «prod». Это означает, что этот класс конфигурации обойден, если профиль ‘prod’ не был активирован.
- Пометьте класс аннотацией @PropertySource и установите для него значение «classpath: application.properties». Это настраивает расположение нашего файла свойств и добавляет PropertySource в среду Spring.
- Добавьте поле Environment в класс и аннотируйте это поле аннотацией @Resource . Внедренная среда используется для доступа к свойствам, которые мы добавили в наш файл свойств.
- Создайте метод с именем solrServerFactoryBean () и аннотируйте этот метод аннотацией @Bean . Реализация этого метода создает новый объект HttpSolrServerFactoryBean , устанавливает значение URL- адреса сервера Solr и возвращает созданный объект.
- Создайте метод с именем 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, выполнив следующие действия:
- Сконфигурируйте используемый файл свойств, используя элемент property-placeholder пространства имен контекста .
- Включите репозитории Solr и настройте базовый пакет наших репозиториев Solr, используя элемент repositories пространства имен solr .
- Создайте конфигурацию компонента для производственного профиля.
- Настройте компонент сервера HTTP Solr с помощью элемента solr-server пространства имен solr . Установите URL сервера Solr.
- Настройте шаблонный компонент 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" ?> 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 > |
Настройка профиля определения активного компонента
Мы можем выбрать профиль определения активного компонента, установив значение системной переменной spring.profiles.active . Допустимые значения этой системной переменной (в контексте нашего примера приложения) описаны ниже:
- Мы можем настроить наше приложение для запуска в профиле разработки, установив значение системной переменной spring.profiles.active в ‘dev’.
- Когда мы хотим сконфигурировать наше приложение для запуска в производственном профиле, мы должны установить системную переменную spring.profiles.active в ‘prod’.
Мы можем настроить наше примерное приложение для поддержки обоих профилей, выполнив следующие действия:
- Добавьте необходимые профили в файл POM.
- Создайте файлы свойств профиля для системных свойств.
- Настройте плагин Jetty Maven.
Эти шаги описаны более подробно ниже.
Добавление необходимых профилей в файл POM
Мы можем добавить необходимые профили в нашу сборку Maven, выполнив следующие действия:
- Создать профиль для среды разработки. Установите для идентификатора этого профиля значение «dev» и установите для свойства build.profile.id значение «dev».
- Создайте профиль для производственной среды. Установите для идентификатора этого профиля значение «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 .
Мы можем создать файлы свойств профиля для системных свойств, выполнив следующие действия:
- Создайте файл свойств с именем system.properties в каталоге profile / dev . Этот файл свойств содержит системные свойства профиля разработки.
- Создайте файл свойств с именем system.properties в каталоге profile / prod . Этот файл свойств содержит системные свойства рабочего профиля.
Содержимое файла свойств, используемого для настройки системных свойств профиля разработки, выглядит следующим образом:
1
|
spring.profiles.active=dev |
Содержимое файла свойств, используемого для настройки системных свойств рабочего профиля, выглядит следующим образом:
1
|
spring.profiles.active=prod |
Настройка подключаемого модуля Jetty Maven
Мы можем настроить плагин Jetty Maven , выполнив следующие действия:
- Добавьте объявление о плагине Jetty Maven в раздел плагинов нашего Pom-файла.
- Настройте stopKey и stopPort для подключаемого модуля Jetty Maven.
- Настройте расположение файла свойств, содержащего используемые системные свойства.
Конфигурация плагина 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 .