本文已参与「新人创作礼活动」,一起开启掘金创作之路。
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的集成,先将代码结构展示一下。
- 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数据自动导入