之前的项目中一直使用的是数据库表记录用户操作日志的,但随着时间的推移,数据库log单表是越来越大「不考虑删除」,再加上近期项目中需要用到Elasticsearch,所以干脆把这些用户日志迁移到ES上来了。
环境:SpringBoot2.2.6 + Elasticsearch6.8.8
如果你还不了解Elasticsearch的话,可以参考之前的几篇文章:
由于之前就是使用的AOP+注解方式实现日志记录,而本次依旧采用这种方式,所以改动不大,把保存至数据库换成ES就可以了,开始吧。
文章最后我会提供源码的,正文描述部分有省略~
1、引入依赖文件
pom.xml文件中引入需要的es、aop所需的依赖:
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.2.6.RELEASE
com.example
demo
0.0.1-SNAPSHOT
demo
Demo project for Spring Boot
1.8
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-devtools
runtime
true
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
org.junit.vintage
junit-vintage-engine
org.springframework.boot
spring-boot-starter-aop
org.springframework.boot
spring-boot-starter-data-elasticsearch
com.google.code.gson
gson
2.8.6
cn.hutool
hutool-all
5.3.2
org.springframework.boot
spring-boot-maven-plugin
2、修改yml配置文件
加入elasticsearch的配置信息:
server:
port: 6666
servlet:
context-path: /
tomcat:
uri-encoding: UTF-8
spring:
# Elasticsearch
data:
elasticsearch:
client:
reactive:
# 要连接的ES客户端 多个逗号分隔
endpoints: 127.0.0.1:9300
# 暂未使用ES 关闭其持久化存储
repositories:
enabled: true
3、Log实体
使用了lombok「 @Data 注解」简化 set\get,spring-data-elasticsearch提供了@Document、@Id、@Field注解,其中@Document作用在实体类上,指向文档地址,@Id、@Field作用于成员变量上,分别表示主键、字段。
@Data
@Document(indexName = "log", type = "log", shards = 1, replicas = 0, refreshInterval = "-1")
public class EsLog implements Serializable{
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@Id
private String id = SnowFlakeUtil.nextId().toString();
/**
* 创建者
*/
private String createBy;
/**
* 创建时间
*/
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@Field(type = FieldType.Date, index = false, format = DateFormat.custom, pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime = new Date();
/**