From cc74b454d8dbac06d6b53df1fd28c1017ddef4e4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?=
<15040126243@163.com>
Date: Mon, 18 May 2026 18:31:54 +0800
Subject: [PATCH] =?UTF-8?q?add=20=E6=96=B0=E5=A2=9E=20=E8=BF=81=E7=A7=BBcl?=
=?UTF-8?q?oud=E7=89=88=E6=9C=AC=20ruoyi-common-elasticsearch=20=E6=A8=A1?=
=?UTF-8?q?=E5=9D=97=20=E5=8F=AF=E6=8E=A5=E5=85=A5es=E5=BC=80=E5=8F=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 20 +++++
.../src/main/resources/application.yml | 46 ++++++++++
ruoyi-common/pom.xml | 1 +
ruoyi-common/ruoyi-common-bom/pom.xml | 7 ++
.../ruoyi-common-elasticsearch/pom.xml | 24 +++++
.../ActuatorEnvironmentPostProcessor.java | 26 ++++++
.../config/EasyEsConfiguration.java | 17 ++++
.../main/resources/META-INF/spring.factories | 2 +
...ot.autoconfigure.AutoConfiguration.imports | 1 +
ruoyi-modules/ruoyi-demo/pom.xml | 5 ++
.../demo/controller/EsCrudController.java | 89 +++++++++++++++++++
.../org/dromara/demo/domain/Document.java | 26 ++++++
.../dromara/demo/esmapper/DocumentMapper.java | 7 ++
13 files changed, 271 insertions(+)
create mode 100644 ruoyi-common/ruoyi-common-elasticsearch/pom.xml
create mode 100644 ruoyi-common/ruoyi-common-elasticsearch/src/main/java/org/dromara/common/elasticsearch/config/ActuatorEnvironmentPostProcessor.java
create mode 100644 ruoyi-common/ruoyi-common-elasticsearch/src/main/java/org/dromara/common/elasticsearch/config/EasyEsConfiguration.java
create mode 100644 ruoyi-common/ruoyi-common-elasticsearch/src/main/resources/META-INF/spring.factories
create mode 100644 ruoyi-common/ruoyi-common-elasticsearch/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
create mode 100644 ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/EsCrudController.java
create mode 100644 ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/Document.java
create mode 100644 ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/esmapper/DocumentMapper.java
diff --git a/pom.xml b/pom.xml
index 9b72103fc..f3abbf70e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -52,6 +52,8 @@
1.8.7
2.5.12
+ 3.0.2
+ 7.17.28
2.0.0-M6
@@ -325,6 +327,24 @@
${mica-mqtt.version}
+
+ org.dromara.easy-es
+ easy-es-boot-starter
+ ${easy-es.version}
+
+
+
+ co.elastic.clients
+ elasticsearch-java
+ ${elasticsearch-client.version}
+
+
+
+ org.elasticsearch.client
+ elasticsearch-rest-client
+ ${elasticsearch-client.version}
+
+
me.zhyd.oauth
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index beab6585f..8c9f26c19 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -282,6 +282,52 @@ mqtt.client:
truststore-path:
truststore-pass:
+--- # elasticsearch 功能配置
+# 文档地址: https://www.easy-es.cn/
+# 更改包名需要去 EasyEsConfiguration 修改包扫描(后续版本支持配置文件读取)
+easy-es:
+ # 是否开启EE自动配置
+ enable: false
+ # 兼容模式
+ compatible: true
+ # es连接地址+端口 格式必须为ip:port,如果是集群则可用逗号隔开
+ address: localhost:9200
+ # 默认为http
+ schema: http
+ # 注意ES建议使用账号认证 不使用会报警告日志
+ # 如果无账号密码则可不配置此行
+ # username:
+ # 如果无账号密码则可不配置此行
+ # password:
+ # 心跳策略时间 单位:ms
+ keep-alive-millis: 18000
+ # 连接超时时间 单位:ms
+ connectTimeout: 5000
+ # 通信超时时间 单位:ms
+ socketTimeout: 5000
+ # 连接请求超时时间 单位:ms
+ connectionRequestTimeout: 5000
+ # 最大连接数 单位:个
+ maxConnTotal: 100
+ # 最大连接路由数 单位:个
+ maxConnPerRoute: 100
+ global-config:
+ # 开启控制台打印通过本框架生成的DSL语句,默认为开启,测试稳定后的生产环境建议关闭,以提升少量性能
+ print-dsl: true
+ # 异步处理索引是否阻塞主线程 默认阻塞 数据量过大时调整为非阻塞异步进行 项目启动更快
+ asyncProcessIndexBlocking: true
+ db-config:
+ # 是否开启下划线转驼峰 默认为false
+ map-underscore-to-camel-case: true
+ # id生成策略 customize为自定义,id值由用户生成,比如取MySQL中的数据id,如缺省此项配置,则id默认策略为es自动生成
+ id-type: customize
+ # 字段更新策略 默认为not_null
+ field-strategy: not_null
+ # 默认开启,查询若指定了size超过1w条时也会自动开启,开启后查询所有匹配数据,若不开启,会导致无法获取数据总条数,其它功能不受影响.
+ enable-track-total-hits: true
+ # 数据刷新策略,默认为不刷新
+ refresh-policy: immediate
+
--- # MCP 服务端配置
spring.ai.mcp:
server:
diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index fb14db339..17e22d37c 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -30,6 +30,7 @@
ruoyi-common-satoken
ruoyi-common-security
ruoyi-common-sms
+ ruoyi-common-elasticsearch
ruoyi-common-web
ruoyi-common-translation
ruoyi-common-sensitive
diff --git a/ruoyi-common/ruoyi-common-bom/pom.xml b/ruoyi-common/ruoyi-common-bom/pom.xml
index 809474e19..cba9a6f03 100644
--- a/ruoyi-common/ruoyi-common-bom/pom.xml
+++ b/ruoyi-common/ruoyi-common-bom/pom.xml
@@ -103,6 +103,13 @@
${revision}
+
+
+ org.dromara
+ ruoyi-common-elasticsearch
+ ${revision}
+
+
org.dromara
diff --git a/ruoyi-common/ruoyi-common-elasticsearch/pom.xml b/ruoyi-common/ruoyi-common-elasticsearch/pom.xml
new file mode 100644
index 000000000..a7332817d
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-elasticsearch/pom.xml
@@ -0,0 +1,24 @@
+
+
+
+ org.dromara
+ ruoyi-common
+ ${revision}
+
+ 4.0.0
+
+ ruoyi-common-elasticsearch
+
+
+ ruoyi-common-elasticsearch ES搜索引擎服务
+
+
+
+
+ org.dromara.easy-es
+ easy-es-boot-starter
+
+
+
diff --git a/ruoyi-common/ruoyi-common-elasticsearch/src/main/java/org/dromara/common/elasticsearch/config/ActuatorEnvironmentPostProcessor.java b/ruoyi-common/ruoyi-common-elasticsearch/src/main/java/org/dromara/common/elasticsearch/config/ActuatorEnvironmentPostProcessor.java
new file mode 100644
index 000000000..e33a67edc
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-elasticsearch/src/main/java/org/dromara/common/elasticsearch/config/ActuatorEnvironmentPostProcessor.java
@@ -0,0 +1,26 @@
+package org.dromara.common.elasticsearch.config;
+
+import org.springframework.boot.EnvironmentPostProcessor;
+import org.springframework.boot.SpringApplication;
+import org.springframework.core.Ordered;
+import org.springframework.core.env.ConfigurableEnvironment;
+
+/**
+ * 健康检查配置注入
+ *
+ * @author Lion Li
+ */
+public class ActuatorEnvironmentPostProcessor implements EnvironmentPostProcessor, Ordered {
+
+ @Override
+ public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
+ String enable = environment.getProperty("easy-es.enable", "false");
+ System.setProperty("management.health.elasticsearch.enabled", enable);
+ }
+
+ @Override
+ public int getOrder() {
+ return Ordered.HIGHEST_PRECEDENCE;
+ }
+
+}
diff --git a/ruoyi-common/ruoyi-common-elasticsearch/src/main/java/org/dromara/common/elasticsearch/config/EasyEsConfiguration.java b/ruoyi-common/ruoyi-common-elasticsearch/src/main/java/org/dromara/common/elasticsearch/config/EasyEsConfiguration.java
new file mode 100644
index 000000000..ceb9c2bfe
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-elasticsearch/src/main/java/org/dromara/common/elasticsearch/config/EasyEsConfiguration.java
@@ -0,0 +1,17 @@
+package org.dromara.common.elasticsearch.config;
+
+import org.dromara.easyes.spring.annotation.EsMapperScan;
+import org.springframework.boot.autoconfigure.AutoConfiguration;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+
+/**
+ * easy-es 配置
+ *
+ * @author Lion Li
+ */
+@AutoConfiguration
+@ConditionalOnProperty(value = "easy-es.enable", havingValue = "true")
+@EsMapperScan("org.dromara.**.esmapper")
+public class EasyEsConfiguration {
+
+}
diff --git a/ruoyi-common/ruoyi-common-elasticsearch/src/main/resources/META-INF/spring.factories b/ruoyi-common/ruoyi-common-elasticsearch/src/main/resources/META-INF/spring.factories
new file mode 100644
index 000000000..1a18290aa
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-elasticsearch/src/main/resources/META-INF/spring.factories
@@ -0,0 +1,2 @@
+org.springframework.boot.env.EnvironmentPostProcessor=\
+ org.dromara.common.elasticsearch.config.ActuatorEnvironmentPostProcessor
diff --git a/ruoyi-common/ruoyi-common-elasticsearch/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-common/ruoyi-common-elasticsearch/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
new file mode 100644
index 000000000..b1a5918ec
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-elasticsearch/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -0,0 +1 @@
+org.dromara.common.elasticsearch.config.EasyEsConfiguration
diff --git a/ruoyi-modules/ruoyi-demo/pom.xml b/ruoyi-modules/ruoyi-demo/pom.xml
index 847c7d6bf..f3800ccda 100644
--- a/ruoyi-modules/ruoyi-demo/pom.xml
+++ b/ruoyi-modules/ruoyi-demo/pom.xml
@@ -88,6 +88,11 @@
ruoyi-common-encrypt
+
+ org.dromara
+ ruoyi-common-elasticsearch
+
+
org.dromara
ruoyi-common-push
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/EsCrudController.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/EsCrudController.java
new file mode 100644
index 000000000..d3a154801
--- /dev/null
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/EsCrudController.java
@@ -0,0 +1,89 @@
+package org.dromara.demo.controller;
+
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.demo.domain.Document;
+import org.dromara.demo.esmapper.DocumentMapper;
+import org.dromara.easyes.core.conditions.select.LambdaEsQueryWrapper;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 搜索引擎 crud 演示案例
+ *
+ * @author Lion Li
+ */
+@ConditionalOnProperty(value = "easy-es.enable", havingValue = "true")
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/es")
+public class EsCrudController {
+
+ private final DocumentMapper documentMapper;
+
+ /**
+ * 查询(指定)
+ *
+ * @param title 标题
+ */
+ @GetMapping("/select")
+ public Document select(String title) {
+ LambdaEsQueryWrapper wrapper = new LambdaEsQueryWrapper<>();
+ wrapper.eq(Document::getTitle, title);
+ return documentMapper.selectOne(wrapper);
+ }
+
+ /**
+ * 搜索(模糊)
+ *
+ * @param key 搜索关键字
+ */
+ @GetMapping("/search")
+ public List search(String key) {
+ LambdaEsQueryWrapper wrapper = new LambdaEsQueryWrapper<>();
+ wrapper.like(Document::getTitle, key);
+ return documentMapper.selectList(wrapper);
+ }
+
+ /**
+ * 插入
+ */
+ @PostMapping("/insert")
+ public Integer insert(@RequestBody Document document) {
+ return documentMapper.insert(document);
+ }
+
+ /**
+ * 更新
+ */
+ @PutMapping("/update")
+ public R update(@RequestBody Document document) {
+ // 测试更新 更新有两种情况 分别演示如下:
+ // case1: 已知id, 根据id更新 (为了演示方便,此id是从上一步查询中复制过来的,实际业务可以自行查询)
+ documentMapper.updateById(document);
+
+ // case2: id未知, 根据条件更新
+// LambdaEsUpdateWrapper wrapper = new LambdaEsUpdateWrapper<>();
+// wrapper.like(Document::getTitle, document.getTitle());
+// Document document2 = new Document();
+// document2.setTitle(document.getTitle());
+// document2.setContent(document.getContent());
+// documentMapper.update(document2, wrapper);
+
+ return R.ok();
+ }
+
+ /**
+ * 删除
+ *
+ * @param id 主键
+ */
+ @DeleteMapping("/delete/{id}")
+ public R delete(@PathVariable String id) {
+ // 测试删除数据 删除有两种情况:根据id删或根据条件删
+ return R.ok(documentMapper.deleteById(id));
+ }
+
+}
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/Document.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/Document.java
new file mode 100644
index 000000000..f9f06dda6
--- /dev/null
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/Document.java
@@ -0,0 +1,26 @@
+package org.dromara.demo.domain;
+
+import lombok.Data;
+
+/**
+ * 文档实体
+ */
+@Data
+public class Document {
+
+ /**
+ * es中的唯一id
+ */
+ private String id;
+
+ /**
+ * 文档标题
+ */
+ private String title;
+
+ /**
+ * 文档内容
+ */
+ private String content;
+
+}
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/esmapper/DocumentMapper.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/esmapper/DocumentMapper.java
new file mode 100644
index 000000000..63c982366
--- /dev/null
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/esmapper/DocumentMapper.java
@@ -0,0 +1,7 @@
+package org.dromara.demo.esmapper;
+
+import org.dromara.demo.domain.Document;
+import org.dromara.easyes.core.kernel.BaseEsMapper;
+
+public interface DocumentMapper extends BaseEsMapper {
+}