之前的項目中一直使用的是資料庫表記錄使用者記錄檔的,但随着時間的推移,資料庫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
如果你覺得本篇文章對你有所幫助,不如右上角關注一下我~