之前的项目中一直使用的是数据库表记录用户操作日志的,但随着时间的推移,数据库log单表是越来越大「不考虑删除」,再加上近期项目中需要用到<code>Elasticsearch</code>,所以干脆把这些用户日志迁移到ES上来了。
环境:SpringBoot2.2.6 + Elasticsearch6.8.8
如果你还不了解Elasticsearch的话,可以参考之前的几篇文章:
ES基本概念:
https://blog.51cto.com/u_11827525/2860275
重温ES基础:
https://blog.51cto.com/u_11827525/2860242
ES-Windows集群搭建:
https://blog.51cto.com/u_11827525/2860239
ES-Docker集群搭建:
https://blog.51cto.com/u_11827525/2854808
MacOS中ES搭建:
https://blog.51cto.com/u_11827525/2860233
由于之前就是使用的<code>AOP+注解</code>方式实现日志记录,而本次依旧采用这种方式,所以改动不大,把保存至数据库换成ES就可以了,开始吧。
文章最后我会提供源码的,正文描述部分有省略~
<code>pom.xml</code>文件中引入需要的<code>es</code>、<code>aop</code>所需的依赖:
加入<code>elasticsearch</code>的配置信息:
使用了<code>lombok</code>「 @Data 注解」简化 <code>set\get</code>,<code>spring-data-elasticsearch</code>提供了<code>@Document</code>、<code>@Id</code>、<code>@Field</code>注解,其中<code>@Document</code>作用在实体类上,指向文档地址,<code>@Id</code>、<code>@Field</code>作用于成员变量上,分别表示<code>主键</code>、<code>字段</code>。
数据操作层,有两种方式实现对<code>Elasticsearch</code>数据的修改,一是使用<code>ElasticsearchTemplate</code>,二是通过<code>ElasticsearchRepository</code>接口,本文基于后者接口方式。
用过<code>SpringDataJPA</code>的小伙伴就不陌生了,如下实现接口就跟<code>JPA</code>通过方法名称生成<code>SQL</code>一样简单。
默认情况下,<code>ElasticsearchRepository</code>提供了<code>findById()</code>、<code>findAll()</code>、<code>findAllById()</code>、<code>search()</code>等方法供我们方便使用。
自定义 @SystemLog 注解,用于标记需要记录日志的方法。
步骤5中自定义了注解,那么接下来就是定位注解,以及对定位后的方法进行业务处理部分了,而对我们来说就是把日志记录至<code>Elasticsearch</code>中。
<code>EsLogService</code>中我们编写几个常用的接口方法,增删改查:
我们简单看一下这个 <code>findAll</code> 方法的实现类吧,其他方法就是直接调用<code>ElasticsearchRepository</code>提供的<code>findById()</code>、<code>findAll()</code>、<code>findAllById()</code>、<code>save()</code>等方法。
以 <code>getA()</code>方法为例,直接通过浏览器调用:http://127.0.0.1:6666/log/getA,然后在 ES 中查询一下是否保存成功:

image-20200526224423804
以getAll()方法为例,再测试一下查询方法,在浏览器输入 http://127.0.0.1:8888/log/getAll?key=&type=2,返回如下:
image-20200526224614801
本节是我拆分出来的一个demo,经测试增删改查是没问题、同时查询方法加入了分页查询,具体代码细节可以下载本节源码自行查看。
源码下载链接:https://niceyoo.lanzous.com/id0yikf
如果你觉得本篇文章对你有所帮助,不如右上角关注一下我~