javascript
Spring Data Solr教程:将自定义方法添加到单个存储库
我的Spring Data Solr教程的前一部分教我們?nèi)绾问褂貌樵?xún)方法創(chuàng)建靜態(tài)查詢(xún)。 自然而然的下一步將是描述如何使用Spring Data Solr創(chuàng)建動(dòng)態(tài)查詢(xún)。 但是,在繼續(xù)討論該主題之前,我們必須了解如何將自定義方法添加到單個(gè)存儲(chǔ)庫(kù)。 這篇博客文章將幫助我們了解如何完成。 在此博客條目期間,我們將修改示例應(yīng)用程序 ,以使用稱(chēng)為部分更新的技術(shù)將todo條目的信息更新為Solr索引。 讓我們從仔細(xì)研究Solr的部分更新功能開(kāi)始。
注意:這些博客條目提供了其他信息,有助于我們理解此博客條目中描述的概念:
- 使用Maven運(yùn)行Solr
- Spring Data Solr教程:Solr簡(jiǎn)介
- Spring Data Solr教程:配置
- Spring Data Solr教程CRUD(幾乎)
什么是部分更新?
Solr 4.0中引入了部分更新功能,它使我們可以選擇要更新的字段。 如果索引整個(gè)文檔的內(nèi)容很慢,這將非常有用。
但是,部分更新功能有其局限性。 如果要使用部分更新功能,則必須存儲(chǔ)文檔的所有字段,這會(huì)增加Solr索引的大小。 這樣做的原因是不可能對(duì)Lucene索引進(jìn)行部分更新。 Lucene總是在索引新文檔之前刪除舊文檔。 這意味著,如果不存儲(chǔ)未更新的字段,則在對(duì)文檔進(jìn)行部分更新時(shí),這些字段的值會(huì)丟失。
決定哪個(gè)對(duì)我們更重要是我們的工作:速度或索引的大小。
通過(guò)查看以下資源,我們可以獲得有關(guān)部分更新的更多信息:
- Solr 4.0:部分文檔更新
- Solr –文檔的部分更新@ StackOverflow
- Solr –將新字段更新為現(xiàn)有文檔@ StackOverflow
讓我們繼續(xù)學(xué)習(xí)如何將自定義方法添加到單個(gè)Spring Data Solr存儲(chǔ)庫(kù)中。
將自定義方法添加到單個(gè)存儲(chǔ)庫(kù)
我們可以按照以下步驟將自定義方法添加到單個(gè)存儲(chǔ)庫(kù)中:
在以下小節(jié)中將更詳細(xì)地描述這些步驟。
創(chuàng)建自定義界面
首先,我們必須創(chuàng)建一個(gè)接口并在其中聲明自定義方法。 我們可以按照以下步驟進(jìn)行操作:
因?yàn)槲覀冎恍枰暶饕粋€(gè)用于更新待辦事項(xiàng)信息的自定義方法,所以PartialUpdateRepository接口的源代碼如下所示:
public interface PartialUpdateRepository {public void update(Todo todoEntry); }實(shí)施自定義界面
其次,我們必須實(shí)現(xiàn)PartialUpdateRepository接口。 存儲(chǔ)庫(kù)基礎(chǔ)結(jié)構(gòu)嘗試使用以下規(guī)則自動(dòng)檢測(cè)實(shí)現(xiàn)自定義存儲(chǔ)庫(kù)接口的類(lèi):
- 必須從與定制接口相同的包中找到定制存儲(chǔ)庫(kù)接口的實(shí)現(xiàn)。
- 必須使用以下公式來(lái)創(chuàng)建實(shí)現(xiàn)自定義存儲(chǔ)庫(kù)接口的類(lèi)的名稱(chēng) : [實(shí)際存儲(chǔ)庫(kù)接口的名稱(chēng)] [存儲(chǔ)庫(kù)實(shí)現(xiàn)后綴] 。
存儲(chǔ)庫(kù)實(shí)現(xiàn)后綴的默認(rèn)值為“ Impl”。 我們可以使用以下方法之一覆蓋默認(rèn)值:
- 如果使用Java配置,則可以通過(guò)將首選后綴設(shè)置為@EnableSolrRepositories批注的repositoryImplementationPostfix屬性的值來(lái)配置使用的后綴。
- 如果使用XML配置,則可以通過(guò)將首選postfix設(shè)置為repository名稱(chēng)空間元素的repository-impl-postfix屬性的值來(lái)配置使用的postfix。
此博客條目的示例應(yīng)用程序使用默認(rèn)配置。 因此,我們可以按照以下步驟實(shí)現(xiàn)PartialUpdateRepository接口:
讓我們仔細(xì)看看update()方法的實(shí)現(xiàn)。 我們可以通過(guò)執(zhí)行以下步驟來(lái)實(shí)現(xiàn)此方法:
TodoRepositoryImpl類(lèi)的源代碼如下所示:
import org.springframework.data.solr.core.SolrTemplate; import org.springframework.data.solr.core.query.PartialUpdate; import org.springframework.stereotype.Repository;import javax.annotation.Resource;@Repository public class TodoDocumentRepositoryImpl implements PartialUpdateRepository {@Resourceprivate SolrTemplate solrTemplate;@Overridepublic void update(Todo todoEntry) {PartialUpdate update = new PartialUpdate("id", todoEntry.getId().toString());update.add("description", todoEntry.getDescription());update.add("title", todoEntry.getTitle());solrTemplate.saveBean(update);solrTemplate.commit();} }修改存儲(chǔ)庫(kù)界面
通過(guò)擴(kuò)展PartialUpdateRepository接口,我們可以使自定義update()方法對(duì)存儲(chǔ)庫(kù)的用戶(hù)可見(jiàn)。 TodoDocumentRepository接口的源代碼如下所示:
import org.springframework.data.solr.repository.SolrCrudRepository;public interface TodoDocumentRepository extends PartialUpdateRepository, SolrCrudRepository<TodoDocument, String> {//Query methods are omitted. }讓我們繼續(xù)前進(jìn),了解如何使用我們的新存儲(chǔ)庫(kù)方法。
使用自定義方法
我們可以通過(guò)對(duì)示例應(yīng)用程序進(jìn)行以下更改來(lái)使用自定義update()方法:
在以下小節(jié)中將更詳細(xì)地描述這些步驟。
向TodoIndexService接口添加新方法
我們記得, TodoIndexRepository接口聲明了一些方法,這些方法用于向Solr索引添加信息,從Solr索引中搜索信息并從索引中刪除文檔。
我們必須向該接口添加新方法。 此方法稱(chēng)為update() ,它將更新的Todo對(duì)象作為方法參數(shù)。 TodoIndexRepository接口的源代碼如下所示:
public interface TodoIndexService {//Other methods are omitted.public void update(Todo todoEntry); }實(shí)施添加的方法
通過(guò)執(zhí)行以下步驟,我們可以實(shí)現(xiàn)TodoIndexService接口的update()方法:
RepositoryTodoIndexService類(lèi)的源代碼如下所示:
import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional;import javax.annotation.Resource;@Service public class RepositoryTodoIndexService implements TodoIndexService {@Resourceprivate TodoDocumentRepository repository;//Other fields and methods are omitted.@Transactional@Overridepublic void update(Todo todoEntry) {repository.update(todoEntry);} }修改RepositoryTodoService類(lèi)
我們的最后一步是修改RepositoryTodoService類(lèi)的update()方法,以使用在TodoIndexService接口中聲明的新update()方法。 RepositoryTodoService類(lèi)的相關(guān)部分如下所示:
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional;import javax.annotation.Resource;@Service public class RepositoryTodoService implements TodoService {@Resourceprivate TodoIndexService indexService;@Resourceprivate TodoRepository repository;//Other methods are omitted.@PreAuthorize("hasPermission('Todo', 'update')")@Transactional(rollbackFor = {TodoNotFoundException.class})@Overridepublic Todo update(TodoDTO updated) throws TodoNotFoundException {Todo model = findById(updated.getId());model.update(updated.getDescription(), updated.getTitle());indexService.update(model);return model;} }摘要
現(xiàn)在,我們已經(jīng)向單個(gè)Spring Data Solr存儲(chǔ)庫(kù)添加了一個(gè)自定義方法,并實(shí)現(xiàn)了使用Solr的部分更新功能的更新功能。 本教程教了我們兩件事:
- 我們知道如何將自定義方法添加到單個(gè)Spring Data Solr存儲(chǔ)庫(kù)。
- 我們知道,只有存儲(chǔ)了文檔的所有字段( 存儲(chǔ)屬性的值為true),我們才可以使用部分更新。
我的Spring Data Solr教程的下一部分描述了如何利用從該博客文章中學(xué)到的技能來(lái)使用Spring Data Solr創(chuàng)建動(dòng)態(tài)查詢(xún) 。
PS此博客條目的示例應(yīng)用程序可從Github獲得 。
翻譯自: https://www.javacodegeeks.com/2013/05/spring-data-solr-tutorial-adding-custom-methods-to-a-single-repository.html
總結(jié)
以上是生活随笔為你收集整理的Spring Data Solr教程:将自定义方法添加到单个存储库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: DDOS 全球灵魂(ddos 全球)
- 下一篇: 基于Spring的应用程序-迁移到Jun