日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Data Solr教程:向所有存储库添加自定义方法

發布時間:2023/12/3 javascript 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Data Solr教程:向所有存储库添加自定义方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如果我們在現實生活中的軟件項目中使用Spring Data Solr,很可能我們遲早會遇到一個要求,該要求指出我們的應用程序必須能夠與本地Solr服務器和SolrCloud進行通信 。 目前,滿足此要求意味著我們必須向所有Spring Data Solr存儲庫添加自定義方法。 這篇博客文章描述了如何做到這一點。

作為示例,我們將修改Spring Data Solr教程的上一部分的示例應用程序 。 在本博客中,我們將以某種方式更改該應用程序的自定義存儲庫實現,以將其所有方法都添加到所有存儲庫中。

注意:這當然是一個天真的示例,因為自定義接口及其實現都與TodoDocument類綁定。

我們可以按照以下步驟將自定義方法添加到所有存儲庫:

  • 使用Maven獲取所需的依賴項
  • 創建一個聲明自定義方法的接口。
  • 實現創建的接口。
  • 創建一個自定義存儲庫工廠bean。
  • 將Spring Data Solr配置為使用自定義存儲庫工廠bean。
  • 注意:這些博客文章提供了其他信息,可幫助我們理解此博客文章中描述的概念:

    • 使用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文件進行以下更改來獲得所需的依賴關系:

  • 將Spring快照存儲庫添加到pom.xml文件的存儲庫部分。
  • 更改Spring Data Solr依賴項的版本。
  • 在以下小節中將更詳細地描述這些步驟。

    使用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>

    創建自定義存儲庫界面

    我們可以按照以下步驟為存儲庫創建一個自定義界面:

  • 創建一個名為CustomBaseRepository的接口,該接口具有兩個類型參數:文檔類型( T )和文檔ID ( ID )。
  • 確保CustomBaseRepository接口擴展了SolrCrudRepository接口。
  • 使用@NoRepositoryBean批注對接口進行批注。 這樣可以確保Spring Data Solr不會嘗試為我們的接口創建實現。
  • 將count()和update()方法的方法聲明添加到CustomBaseRepository接口。
  • 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); }

    下一步是實現創建的接口。 讓我們找出這是如何完成的。

    實施自定義存儲庫界面

    我們可以按照以下步驟實現自定義存儲庫:

  • 創建一個名為CustomBaseRepositoryImpl的類。 此類具有兩個類型參數:文檔的類型( T )和文檔的ID( ID )的類型。
  • 確保創建的類擴展SimpleSolrRepository類并實現CustomBaseRepository接口。
  • 創建一個構造函數,該構造函數將SolrOperations對象和文檔類的類型作為構造函數參數。 該構造函數的實現只是調用超類的構造函數。
  • 實現update()方法。 因為此博客文章中已描述了此方法的實現,所以在此不再贅述。
  • 實現count()方法。 同樣,由于在前面已經介紹了此方法的實現,因此在此不再贅述。
  • 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();} }

    讓我們繼續前進,了解如何創建自定義存儲庫工廠bean。

    創建自定義存儲庫工廠Bean

    存儲庫工廠bean是負責為存儲庫接口創建實現的組件。 因為我們要使用CustomBaseRepositoryImpl類作為Spring Data Solr存儲庫的實現,所以我們必須創建一個自定義存儲庫工廠bean。

    我們可以按照以下步驟創建一個新的存儲庫工廠bean:

  • 創建一個名為CustomSolrRepositoryFactoryBean的類,該類擴展了SolrRepositoryFactoryBean類。
  • 將私有CustomSolrRepositoryFactory類添加到CustomSolrRepositoryFactory bean類。 該類擴展了SolrRepositoryFactory類,它具有兩個類型參數:文檔類型( T )和文檔ID( ID )的類型。
  • 重寫SolrRepositoryFactoryBean類的doCreateRepositoryFactory()方法。 此方法的實現返回一個新的CustomSolrRepositoryFactory對象。
  • 讓我們仔細看看CustomSolrRepositoryFactory類的實現。 我們可以按照以下步驟實現它:

  • 將一個SolrOperations字段添加到CustomSolrRepositoryFactory類。
  • 將構造函數添加到CustomSolrRepositoryFactory類。 此類將使用的SolrOperations對象用作構造函數參數。 它的實現將僅調用超類的構造函數,并將接收到的SolrOperations對象設置為我們在第一步中創建的字段。
  • 重寫SolrRepositoryFactory類的getTargetRepository()方法并返回一個新CustomBaseRepositoryImpl對象。
  • 重寫SolrRepositoryFactory類的getRepositoryBaseClass()方法,并返回我們的自定義接口的類型。
  • 而已。 我們的自定義存儲庫工廠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以使用我們剛創建的存儲庫工廠bean。 讓我們開始吧。

    配置Spring Data Solr

    我們的最后一步是將Spring Data Solr配置為使用上一步中創建的新存儲庫工廠bean。 我們可以通過使用Java配置類或XML配置文件來實現。 以下小節將介紹這兩個選項。

    注意:為了清楚起見,簡化了以下小節中介紹的不同配置文件。 實際上,我們的示例應用程序在開發和生產環境中具有不同的配置 。

    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>

    摘要

    現在,我們創建了兩個自定義方法,這些方法已添加到示例應用程序的所有存儲庫中。 當然,就像我們前面學到的一樣,該示例沒有任何意義,因為我們的自定義存儲庫接口及其實現與TodoDocument類相關。

    本教程教了我們兩件事:

    • 我們可以使用@NoRepositoryBean批注向Spring Data Solr發信號, 通知它不應為使用@NoRepositoryBean批注的接口創建實現。
    • 我們可以使用@EnableSolrRepositories批注的repositoryFactoryBeanBeanClass屬性或存儲庫名稱空間元素的factory-class屬性來配置自定義存儲庫工廠bean。

    與往常一樣,此博客的示例應用程序可在Github上獲得 。

    參考: Spring Data Solr教程:在Petri Kainulainen博客上,從我們的JCG合作伙伴 Petri Kainulainen 向所有存儲庫添加自定義方法 。

    翻譯自: https://www.javacodegeeks.com/2013/06/spring-data-solr-tutorial-adding-custom-methods-to-all-repositories.html

    總結

    以上是生活随笔為你收集整理的Spring Data Solr教程:向所有存储库添加自定义方法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。