瀏覽代碼

解决ES相关报错问题

wukai 1 年之前
父節點
當前提交
f89bcd1208

+ 5 - 1
doc-admin/src/main/resources/application-dev.yml

@@ -12,6 +12,10 @@ spring:
   elasticsearch:
     rest:
       uris: http://192.168.188.88:19200
+      # 链接超时时间,单位:毫秒
+      connection-timeout: 60000
+      # 读超时时间,单位:毫秒
+      read-timeout: 60000
   #mongodb配置
   data:
     mongodb:
@@ -106,4 +110,4 @@ spring:
 logging:
   level:
     com.doc: debug
-    org.springframework: warn
+    org.springframework: warn

+ 113 - 0
doc-admin/src/main/resources/application-t2.yml

@@ -0,0 +1,113 @@
+# 开发环境配置
+server:
+  # 服务器的HTTP端口,默认为8080
+  port: 8080
+# 项目相关配置
+ruoyi:
+  # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
+  profile: /opt/doc/uploadPath
+# Spring配置
+spring:
+  #es配置
+  elasticsearch:
+    rest:
+      uris: http://192.168.101.99:19200
+      # 链接超时时间,单位:毫秒
+      connection-timeout: 60000
+      # 读超时时间,单位:毫秒
+      read-timeout: 60000
+  #mongodb配置
+  data:
+    mongodb:
+      host: 192.168.101.99
+      port: 27017
+      database: document
+
+  # redis 配置
+  redis:
+    # 地址
+    host: 192.168.188.88
+    # 端口,默认为6379
+    port: 6379
+    # 数据库索引
+    database: 0
+    # 密码
+    password:
+    # 连接超时时间
+    timeout: 10s
+    lettuce:
+      pool:
+        # 连接池中的最小空闲连接
+        min-idle: 0
+        # 连接池中的最大空闲连接
+        max-idle: 8
+        # 连接池的最大数据库连接数
+        max-active: 8
+        # #连接池最大阻塞等待时间(使用负值表示没有限制)
+        max-wait: -1ms
+  #数据源配置
+  datasource:
+    type: com.alibaba.druid.pool.DruidDataSource
+    driverClassName: com.mysql.cj.jdbc.Driver
+    druid:
+      # 主库数据源
+      master:
+        url: jdbc:mysql://192.168.101.99:3306/doc?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        username: root
+        password: 123456
+      # 从库数据源
+      slave:
+        # 从数据源开关/默认关闭
+        enabled: false
+        url:
+        username:
+        password:
+      # 初始连接数
+      initialSize: 5
+      # 最小连接池数量
+      minIdle: 10
+      # 最大连接池数量
+      maxActive: 20
+      # 配置获取连接等待超时的时间
+      maxWait: 60000
+      # 配置连接超时时间
+      connectTimeout: 30000
+      # 配置网络超时时间
+      socketTimeout: 60000
+      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+      timeBetweenEvictionRunsMillis: 60000
+      # 配置一个连接在池中最小生存的时间,单位是毫秒
+      minEvictableIdleTimeMillis: 300000
+      # 配置一个连接在池中最大生存的时间,单位是毫秒
+      maxEvictableIdleTimeMillis: 900000
+      # 配置检测连接是否有效
+      validationQuery: SELECT 1 FROM DUAL
+      testWhileIdle: true
+      testOnBorrow: false
+      testOnReturn: false
+      webStatFilter:
+        enabled: true
+      statViewServlet:
+        enabled: true
+        # 设置白名单,不填则允许所有访问
+        allow:
+        url-pattern: /druid/*
+        # 控制台管理用户名和密码
+        login-username: admin
+        login-password: admin
+      filter:
+        stat:
+          enabled: true
+          # 慢SQL记录
+          log-slow-sql: true
+          slow-sql-millis: 1000
+          merge-sql: true
+        wall:
+          config:
+            multi-statement-allow: true
+
+# 日志配置
+logging:
+  level:
+    com.doc: debug
+    org.springframework: warn

+ 37 - 0
doc-biz/src/main/java/com/doc/biz/controller/ElasticSearchController.java

@@ -15,6 +15,11 @@ import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import javafx.util.Pair;
+import org.apache.http.HttpResponse;
+import org.apache.http.nio.protocol.HttpAsyncResponseConsumer;
+import org.elasticsearch.client.HeapBufferedAsyncResponseConsumer;
+import org.elasticsearch.client.HttpAsyncResponseConsumerFactory;
+import org.elasticsearch.client.RequestOptions;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Sort;
@@ -25,6 +30,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -108,7 +115,9 @@ public class ElasticSearchController {
         page = page - 1;
         String indexName = "docs_" + spaceId;
         esConfig.setIndexName(indexName);
+
         try {
+            setBuffer();
             Pageable pageable = PageRequest.of(page, size, Sort.by(Sort.Order.desc("id")));
             long total = esService.countByContent(keyword);
             List<SearchHit<EsDocInfo>> all = esService.findByContent(keyword, pageable);
@@ -133,4 +142,32 @@ public class ElasticSearchController {
             return null;
         }
     }
+
+    /**
+     * 设置es查询buffer大小
+     */
+    private void setBuffer() {
+        try {
+            //设置es查询buffer大小
+            RequestOptions requestOptions = RequestOptions.DEFAULT;
+            Class<? extends RequestOptions> reqClass = requestOptions.getClass();
+            Field reqField = reqClass.getDeclaredField("httpAsyncResponseConsumerFactory");
+            reqField.setAccessible(true);
+            //去除final
+            Field modifiersField = Field.class.getDeclaredField("modifiers");
+            modifiersField.setAccessible(true);
+            modifiersField.setInt(reqField, reqField.getModifiers() & ~Modifier.FINAL);
+            //设置默认的工厂
+            reqField.set(requestOptions, new HttpAsyncResponseConsumerFactory() {
+                @Override
+                public HttpAsyncResponseConsumer<HttpResponse> createHttpAsyncResponseConsumer() {
+                    //1GB
+                    return new HeapBufferedAsyncResponseConsumer(5 * 100 * 1024 * 1024);
+                }
+            });
+        } catch (NoSuchIndexException | IllegalAccessException e) {
+        } catch (NoSuchFieldException e) {
+            throw new RuntimeException(e);
+        }
+    }
 }