javascript
Spring Data Solr教程:向所有存储库添加自定义方法
如果我們在現實生活中的軟件項目中使用Spring Data Solr,很可能我們遲早會遇到一個要求,該要求指出我們的應用程序必須能夠與本地Solr服務器和SolrCloud進行通信 。 目前,滿足此要求意味著我們必須向所有Spring Data Solr存儲庫添加自定義方法。 這篇博客文章描述了如何做到這一點。
作為示例,我們將修改Spring Data Solr教程的上一部分的示例應用程序 。 在本博客中,我們將以某種方式更改該應用程序的自定義存儲庫實現,以將其所有方法都添加到所有存儲庫中。
注意:這當然是一個天真的示例,因為自定義接口及其實現都與TodoDocument類綁定。
我們可以按照以下步驟將自定義方法添加到所有存儲庫:
注意:這些博客文章提供了其他信息,可幫助我們理解此博客文章中描述的概念:
- 使用Maven運行Solr
- Spring Data Solr教程:Solr簡介
- Spring Data Solr教程:配置
- Spring Data Solr教程:查詢方法
- Spring Data Solr教程:將自定義方法添加到單個存儲庫
- Spring Data Solr教程:排序
- Spring Data Solr教程:分頁
閑聊就夠了。 讓我們開始吧。
使用Maven獲取所需的依賴關系
這篇博客文章的示例應用程序使用Spring Data Solr的構建快照,因為它為實現自定義存儲庫工廠bean提供了更好的支持。 我們可以通過對POM文件進行以下更改來獲得所需的依賴關系:
在以下小節(jié)中將更詳細地描述這些步驟。
使用Spring快照存儲庫
通過將以下存儲庫配置添加到我們的POM文件中,我們可以使用Spring快照Maven存儲庫:
<repositories><repository><id>spring-snapshots</id><name>Spring Snapshot Maven Repository</name><url>http://repo.springsource.org/libs-snapshot</url></repository> </repositories>更新Spring Data Solr版本
通過將以下依賴項聲明添加到pom.xml文件中,我們可以使用Spring Data Solr的構建快照。
<dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-solr</artifactId><version>1.0.0.BUILD-SNAPSHOT</version> </dependency>創(chuàng)建自定義存儲庫界面
我們可以按照以下步驟為存儲庫創(chuàng)建一個自定義界面:
CustomBaseRepository接口的源代碼如下所示:
import org.springframework.data.repository.NoRepositoryBean; import org.springframework.data.solr.repository.SolrCrudRepository;import java.io.Serializable;@NoRepositoryBean public interface CustomBaseRepository<T, ID extends Serializable> extends SolrCrudRepository<T, ID> {public long count(String searchTerm);public void update(Todo todoEntry); }下一步是實現創(chuàng)建的接口。 讓我們找出這是如何完成的。
實施自定義存儲庫界面
我們可以按照以下步驟實現自定義存儲庫:
CustomBaseRepositoryImpl類的源代碼如下所示:
import org.springframework.data.solr.core.SolrOperations; import org.springframework.data.solr.core.query.Criteria; import org.springframework.data.solr.core.query.PartialUpdate; import org.springframework.data.solr.core.query.SimpleQuery; import org.springframework.data.solr.repository.support.SimpleSolrRepository;import java.io.Serializable;public class CustomBaseRepositoryImpl<T, ID extends Serializable> extends SimpleSolrRepository<T, ID> implements CustomBaseRepository<T, ID> {public CustomBaseRepositoryImpl(SolrOperations solrOperations, Class<T> entityClass) {super(solrOperations, entityClass);}@Overridepublic long count(String searchTerm) {String[] words = searchTerm.split(" ");Criteria conditions = createSearchConditions(words);SimpleQuery countQuery = new SimpleQuery(conditions);return getSolrOperations().count(countQuery);}private Criteria createSearchConditions(String[] words) {Criteria conditions = null;for (String word: words) {if (conditions == null) {conditions = new Criteria("title").contains(word).or(new Criteria("description").contains(word));}else {conditions = conditions.or(new Criteria("title").contains(word)).or(new Criteria("description").contains(word));}}return conditions;}@Overridepublic void update(Todo todoEntry) {PartialUpdate update = new PartialUpdate("id", todoEntry.getId().toString());update.add("description", todoEntry.getDescription());update.add("title", todoEntry.getTitle());getSolrOperations().saveBean(update);getSolrOperations().commit();} }讓我們繼續(xù)前進,了解如何創(chuàng)建自定義存儲庫工廠bean。
創(chuàng)建自定義存儲庫工廠Bean
存儲庫工廠bean是負責為存儲庫接口創(chuàng)建實現的組件。 因為我們要使用CustomBaseRepositoryImpl類作為Spring Data Solr存儲庫的實現,所以我們必須創(chuàng)建一個自定義存儲庫工廠bean。
我們可以按照以下步驟創(chuàng)建一個新的存儲庫工廠bean:
讓我們仔細看看CustomSolrRepositoryFactory類的實現。 我們可以按照以下步驟實現它:
而已。 我們的自定義存儲庫工廠bean的源代碼如下所示:
import org.springframework.data.repository.core.RepositoryMetadata; import org.springframework.data.repository.core.support.RepositoryFactorySupport; import org.springframework.data.solr.core.SolrOperations; import org.springframework.data.solr.repository.support.SolrRepositoryFactory; import org.springframework.data.solr.repository.support.SolrRepositoryFactoryBean;import java.io.Serializable;public class CustomSolrRepositoryFactoryBean extends SolrRepositoryFactoryBean {@Overrideprotected RepositoryFactorySupport doCreateRepositoryFactory() {return new CustomSolrRepositoryFactory(getSolrOperations());}private static class CustomSolrRepositoryFactory<T, ID extends Serializable> extends SolrRepositoryFactory {private final SolrOperations solrOperations;public CustomSolrRepositoryFactory(SolrOperations solrOperations) {super(solrOperations);this.solrOperations = solrOperations;}@Overrideprotected Object getTargetRepository(RepositoryMetadata metadata) {return new CustomBaseRepositoryImpl<T, ID>(solrOperations, (Class<T>) metadata.getDomainType());}@Overrideprotected Class<?> getRepositoryBaseClass(RepositoryMetadata metadata) {return CustomBaseRepository.class;}} }我們的下一個步驟是配置Spring Data Solr以使用我們剛創(chuàng)建的存儲庫工廠bean。 讓我們開始吧。
配置Spring Data Solr
我們的最后一步是將Spring Data Solr配置為使用上一步中創(chuàng)建的新存儲庫工廠bean。 我們可以通過使用Java配置類或XML配置文件來實現。 以下小節(jié)將介紹這兩個選項。
注意:為了清楚起見,簡化了以下小節(jié)中介紹的不同配置文件。 實際上,我們的示例應用程序在開發(fā)和生產環(huán)境中具有不同的配置 。
Java配置
如果使用Java配置,則可以通過使用@EnableJpaRepositories批注的repositoryFactoryBeanBeanClass屬性,將Spring Data Solr配置為使用自定義存儲庫工廠bean。 配置類的源代碼如下所示:
import org.springframework.context.annotation.Configuration; import org.springframework.data.solr.repository.config.EnableSolrRepositories;@Configuration @EnableSolrRepositories(basePackages = "net.petrikainulainen.spring.datasolr.todo.repository.solr",repositoryFactoryBeanClass = CustomSolrRepositoryFactoryBean.class ) public class SolrContext {//Configuration is omitted. }XML配置
當我們使用XML配置時,可以通過使用存儲庫名稱空間元素的factory-class屬性,將Spring Data Solr配置為使用自定義存儲庫工廠bean。 我們的應用程序上下文的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.xsdhttp://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"><!-- Enable Solr repositories and configure repository base package --><solr:repositories base-package="net.petrikainulainen.spring.datasolr.todo.repository.solr"factory-class="net.petrikainulainen.spring.datasolr.todo.repository.solr.CustomSolrRepositoryFactoryBean"/><!-- The configuration is omitted. --> </Beans>摘要
現在,我們創(chuàng)建了兩個自定義方法,這些方法已添加到示例應用程序的所有存儲庫中。 當然,就像我們前面學到的一樣,該示例沒有任何意義,因為我們的自定義存儲庫接口及其實現與TodoDocument類相關。
本教程教了我們兩件事:
- 我們可以使用@NoRepositoryBean批注向Spring Data Solr發(fā)信號, 通知它不應為使用@NoRepositoryBean批注的接口創(chuàng)建實現。
- 我們可以使用@EnableSolrRepositories批注的repositoryFactoryBeanBeanClass屬性或存儲庫名稱空間元素的factory-class屬性來配置自定義存儲庫工廠bean。
與往常一樣,此博客的示例應用程序可在Github上獲得 。
翻譯自: https://www.javacodegeeks.com/2013/06/spring-data-solr-tutorial-adding-custom-methods-to-all-repositories.html
總結
以上是生活随笔為你收集整理的Spring Data Solr教程:向所有存储库添加自定义方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小鹏汽车计划明年进入英法德等欧洲市场
- 下一篇: final 推出 ZE8000 TWS