Spring-Boot 集成Solr客户端的详细步骤

 更新时间:2017年11月04日 09:30:41   作者:小雨转暴雨  
本篇文章主要介绍了Spring-Boot 集成Solr客户端的详细步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

Solr 是基于 Lucene 的全文检索服务器,可配置、可扩展,并对索引和搜索性能进行了优化。Solr 多用于电子商务网站、门户、论坛这类网站的站内搜索。Solr 可以独立运行在 Jetty、Tomcat 等这些 Servlet 容器中。Solr 索引的实现非常简单,用 POST 方法去向 Solr服务器发送一个描述 Field 及其内容的 JSON 文档,Solr 根据 JSON 文件增删改索引。Solr 搜索只需要发送 HTTP GET 请求,然后对 Solr 返回 JSON 格式的查询结果进行解析,组织页面布局。Solr 不提供构建 UI 的功能,Solr提供了一个管理界面,通过管理界面可以查询 Solr 的配置和运行情况。

tips: IDEA的快速查找类快捷键 (连续按两次 shift 键)

1) maven配置:

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.2.RELEASE</version>
  </parent>

  <properties>
    <spring.data.solr.version>2.1.1.RELEASE</spring.data.solr.version>
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-solr</artifactId>
        <version>${spring.data.solr.version}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <dependencies>
    <!--添加Web依赖, 使项目变成web项目-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-solr</artifactId>
    </dependency>

    <!--test-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
  </dependencies>

2) SpringBoot 快速启动

@SpringBootApplication
@EnableAutoConfiguration
public class AppMain {

  public static void main(String[] args) {
    SpringApplication.run(AppMain.class, args);
  }
}

可能遇见的问题:

1. 一般spring-boot项目的启动类都放在项目的根路径下, 这样可以不用配置@ComponentScan注解来扫描相应的类, 如果遇到无法读取配置类属性的情况, 首先考虑这个因素

3) 在resources下新建application.properties, 完成solr的基本配置

spring.data.solr.host=http://127.0.0.1:8983/solr

这个属性配置的是solr服务器的访问地址, 因为本项目是作为客户端来访问solr服务器, 所以不用做更多的配置

这个属性是是通过@ConfigurationProperties("spring.data.solr")读取出来的, 默认被读取到 SolrProperties.class 中 详情请使用类查找器查看该类

4) 新建一个Controller用来查询Solr服务器数据

@RestController
public class SolrController {

  @Autowired
  private SolrClient client;

  @RequestMapping("/")
  public String testSolr() throws IOException, SolrServerException {
    SolrDocument document = client.getById("test", "fe7a5124-d75b-40b2-93fe-5555512ea6d2");
    System.out.println(document);
    return document.toString();
  }
}

数据是我提前导入的, 这里使用ID查询结果
SolrDocument{goodsId=[129831], id=fe7a5124-d75b-40b2-93fe-5555512ea6d2, _version_=1562570354094768128}

5) solr集成结束, 但问题来了

问题1: 为什么没有配置SolrClient, 但却自动注入成功了呢?
问题2: 它是在什么地方被注入到BeanFactory的? (@Autowired能够注入成功说明该类存在于其中)
问题3: 能不能自己配置?
问题4: 有没有必要自己配置?

6) 解决问题1, 和问题2:

SolrAutoConfiguration 是Solr自动配置的类, 在Spring-Boot启动的时候会自动加载属性, 注入SolrClient类

@Configuration
@ConditionalOnClass({ HttpSolrClient.class, CloudSolrClient.class })
@EnableConfigurationProperties(SolrProperties.class)
public class SolrAutoConfiguration {

  private final SolrProperties properties;

  private SolrClient solrClient;

  public SolrAutoConfiguration(SolrProperties properties) {
    this.properties = properties;
  }

  @Bean
  @ConditionalOnMissingBean
  public SolrClient solrClient() {
    this.solrClient = createSolrClient();
    return this.solrClient;
  }

  private SolrClient createSolrClient() {
    if (StringUtils.hasText(this.properties.getZkHost())) {
      return new CloudSolrClient(this.properties.getZkHost());
    }
    return new HttpSolrClient(this.properties.getHost());
  }

}

当我们引入

<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-solr</artifactId>
  <version>${spring.data.solr.version}</version>
</dependency>

这个自动配置就会因为我们在AppMain.java上配置的@EnableAutoConfiguration注解生效, 这样就会自动注入Bean了

7) 解决问题3, 问题4

肯定是可以自己配置的, 配置方式也非常简单
只需要自己编写一个类, 使用@Configuration注解, 并且配置一个@Bean, 返回SolrClient就可以了

@Configuration
public class SolrClientConfiguration {

  @Autowired
  private Environment environment;

  @Bean
  public SolrClient solrClient() {
    System.out.println("自定义配置SolrClient");
    return new HttpSolrClient(environment.getRequiredProperty("spring.data.solr.host"));
  }
}

启动结果

2017-03-23 10:32:17.414 INFO 10359 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean  : Mapping filter: 'requestContextFilter' to: [/*]
自定义配置SolrClient
2017-03-23 10:32:18.178 INFO 10359 --- [      main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@160f0c04: startup date [Thu Mar 23 10:32:15 CST 2017]; root of context hierarchy

也就是自定义配置完成

我建议不使用自定义的配置方式, 因为它原有的自动装配已经非常方便了. 并且可以根据是否配置zookeeper来判断使用单机版或者集群版.

现在能使用SolrClient了, 剩下的是需要封装工具类, 完成客户端的查询和更新操作就OK了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • java使用三层架构实现电影购票系统

    java使用三层架构实现电影购票系统

    这篇文章主要为大家详细介绍了java使用三层架构实现电影购票系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • Spring Boot+Jpa多数据源配置的完整步骤

    Spring Boot+Jpa多数据源配置的完整步骤

    这篇文章主要给大家介绍了关于Spring Boot+Jpa多数据源配置的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • SpringCloud服务实现同时使用eureka和nacos方法

    SpringCloud服务实现同时使用eureka和nacos方法

    这篇文章主要介绍了SpringCloud服务实现同时使用eureka和nacos方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-01-01
  • Java队列数据结构的实现

    Java队列数据结构的实现

    这篇文章主要介绍了Java队列数据结构的实现,队列是一种特殊的线性表,只允许在表的队头进行删除操作,在表的后端进行插入操作,队列是一个有序表先进先出,想了解更多相关资料的小伙伴可以参考下面文章的详细内容
    2021-12-12
  • Spring实战之注入集合值操作示例

    Spring实战之注入集合值操作示例

    这篇文章主要介绍了Spring实战之注入集合值操作,结合实例形式分析了Spring注入集合值相关配置及使用操作技巧,需要的朋友可以参考下
    2019-11-11
  • springboot创建文件夹失败的解决

    springboot创建文件夹失败的解决

    这篇文章主要介绍了springboot创建文件夹失败的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Java实战项目 健身管理系统

    Java实战项目 健身管理系统

    本文是一个Java语言编写的实战项目,是一个健身管理系统,主要用到了ssm+springboot等技术,技术含量笔记高,感兴趣的童鞋跟着小编往下看吧
    2021-09-09
  • 实现java文章点击量记录实例

    实现java文章点击量记录实例

    这篇文章主要为大家介绍了实现java文章点击量记录实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • 详解Java发送HTTP请求

    详解Java发送HTTP请求

    这篇文章主要介绍了Java发送HTTP请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 关于Spring的AnnotationAwareAspectJAutoProxyCreator类解析

    关于Spring的AnnotationAwareAspectJAutoProxyCreator类解析

    这篇文章主要介绍了关于Spring的AnnotationAwareAspectJAutoProxyCreator类解析,Spring是一个开源免费的框架 , 容器,是一个轻量级的框架 ,需要的朋友可以参考下
    2023-05-05

最新评论