springboot webmvc 项目集成solr服务

223 阅读2分钟

本文已参与「新人创作礼活动」,一起开启掘金创作之路。

1.问题

在项目实施过程中需要使用solr进行全文检索,solr是使用java开发依托jetty发布的web服务,可以独立启动。由于项目为单体应用且想简化系统部署,故思考将solr继承到springboot项目中。

2.思路

  • 使用 自动spring-boot-starter简化配置
  • 后台只使用solr的api,排除jetty服务
  • 前台使用solr现有框架做修改

3.开干!开干!开干!

后台服务

  • 创建 自定义spring-boot-starter -> solr-spring-boot-starter 网上自行 掘进 案例。
  • 编写 properties 配置类进行solr启动必要属性的自动配置
  • 配置 solr api servlet 进行solr 请求拦截与处理
  • 配置 solr html servlet 进行solr首页访问拦截与处理

前台服务

前台服务需要注意的问题是solr index.html依赖的静态资源(如:js/css/imgaes...)在springboot中如何访问?我采用的方式为:LoadAdminUiServlet 加载 solr首页(index.html),首页依赖的静态资源放置于jar包的/META-INF/resources/webjars/下,springboot 默认访问jar包中该路径下的静态资源。方案已经确定,接下来是需要修改的地方:

  • index.html 中静态资源引用路径前统一修添加:webjars/solr-ui/
  • services.js 中在请求后台资源的路径前统一添加:solr/
  • app.js 中route中的templateUrl前统一添加webjars/solr-ui/

数据自动导入

以上可以将solr服务集成与项目中,但是一个更加重要的问题是 solr 本身是一个检索引擎,如果服务中没有数据或者数据不能自动导入,那即时有搜素服务也白扯呀,因为你没有数据呀。所以本人依据网络开源solr自动导入服务,略加修改完成升级后的solr-dataimport-scheduler

4.总结

经过上述一波操作,我实现了单机版solr与springboot的集成,先将代码结构展示一下。

solr.jpg

  • chuan-solr-parent solr相关模块依赖管理
  • solr-spring-boot-starter solr spring boot starter
  • solr-spring-boot-starter-autoconfigure solr 自动装配
  • solr-ui solr 管理端页面
  • solr-dataimport-scheduler solr数据自动导入

5.源码