Browse Source

feat 主流云存储均以支持

4 weeks ago
parent
commit
8a45be4af9

+ 58 - 0
edu-travel-common/edu-travel-common-elastic/pom.xml

@@ -0,0 +1,58 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>edu.travel</groupId>
+        <artifactId>edu-travel-common</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>edu-travel-common-elastic</artifactId>
+    <packaging>jar</packaging>
+
+    <name>edu-travel-common-elastic</name>
+    <url>http://maven.apache.org</url>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+        <!--引入es-high-level-client相关依赖  start-->
+        <dependency>
+            <groupId>org.elasticsearch</groupId>
+            <artifactId>elasticsearch</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.elasticsearch.client</groupId>
+            <artifactId>elasticsearch-rest-client</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.elasticsearch.client</groupId>
+            <artifactId>elasticsearch-rest-high-level-client</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <!--引入es-high-level-client相关依赖  end-->
+    </dependencies>
+</project>

+ 69 - 0
edu-travel-common/edu-travel-common-elastic/src/main/java/edu/travel/elastic/ElasticsearchConfig.java

@@ -0,0 +1,69 @@
+package edu.travel.elastic;
+
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.HttpHost;
+import org.apache.http.auth.AuthScope;
+import org.apache.http.auth.UsernamePasswordCredentials;
+import org.apache.http.client.CredentialsProvider;
+import org.apache.http.impl.client.BasicCredentialsProvider;
+import org.elasticsearch.client.RestClient;
+import org.elasticsearch.client.RestClientBuilder;
+import org.elasticsearch.client.RestHighLevelClient;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * restHighLevelClient 客户端配置类
+ *
+ */
+@Slf4j
+@Data
+@Configuration
+@ConfigurationProperties(prefix = "elasticsearch")
+public class ElasticsearchConfig {
+ 
+    /**
+     * es host ip 地址(集群)
+     */
+    private String hosts;
+    /**
+     * es用户名
+     */
+    private String userName;
+    /**
+     * es密码
+     */
+    private String password;
+    /**
+     * es 请求方式
+     */
+    private String scheme;
+    /**
+     * es 连接超时时间
+     */
+    private int connectTimeOut;
+    /**
+     * es socket 连接超时时间
+     */
+    private int socketTimeOut;
+    /**
+     * es 请求超时时间
+     */
+    private int connectionRequestTimeOut;
+    /**
+     * es 最大连接数
+     */
+    private int maxConnectNum;
+    /**
+     * es 每个路由的最大连接数
+     */
+    private int maxConnectNumPerRoute;
+ 
+ 
+
+}

+ 68 - 0
edu-travel-common/edu-travel-common-elastic/src/main/java/edu/travel/elastic/EsClient.java

@@ -0,0 +1,68 @@
+package edu.travel.elastic;
+
+import org.apache.http.HttpHost;
+import org.apache.http.auth.AuthScope;
+import org.apache.http.auth.UsernamePasswordCredentials;
+import org.apache.http.client.CredentialsProvider;
+import org.apache.http.impl.client.BasicCredentialsProvider;
+import org.elasticsearch.client.RestClient;
+import org.elasticsearch.client.RestClientBuilder;
+import org.elasticsearch.client.RestHighLevelClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+@Configuration
+public class EsClient {
+    @Autowired
+    private ElasticsearchConfig elasticsearchConfig;
+    /**
+     * 如果@Bean没有指定bean的名称,那么方法名就是bean的名称
+     */
+    @Bean(name = "restHighLevelClient")
+    public RestHighLevelClient restHighLevelClient() {
+        // 构建连接对象
+        RestClientBuilder builder = RestClient.builder(getEsHost());
+
+        // 连接延时配置
+        builder.setRequestConfigCallback(requestConfigBuilder -> {
+            requestConfigBuilder.setConnectTimeout(elasticsearchConfig.getConnectTimeOut());
+            requestConfigBuilder.setSocketTimeout(elasticsearchConfig.getSocketTimeOut());
+            requestConfigBuilder.setConnectionRequestTimeout(elasticsearchConfig.getConnectionRequestTimeOut());
+            return requestConfigBuilder;
+        });
+
+        // 连接数配置
+        builder.setHttpClientConfigCallback(httpClientBuilder -> {
+            httpClientBuilder.setMaxConnTotal(elasticsearchConfig.getMaxConnectNum());
+            httpClientBuilder.setMaxConnPerRoute(elasticsearchConfig.getMaxConnectNumPerRoute());
+            httpClientBuilder.setDefaultCredentialsProvider(getCredentialsProvider());
+            return httpClientBuilder;
+        });
+
+        return new RestHighLevelClient(builder);
+    }
+
+    private HttpHost[] getEsHost() {
+        // 拆分地址(es为多节点时,不同host以逗号间隔)
+        List<HttpHost> hostLists = new ArrayList<>();
+        String[] hostList = elasticsearchConfig.getHosts().split(",");
+        for (String addr : hostList) {
+            String host = addr.split(":")[0];
+            String port = addr.split(":")[1];
+            hostLists.add(new HttpHost(host, Integer.parseInt(port), elasticsearchConfig.getScheme()));
+        }
+        // 转换成 HttpHost 数组
+        return hostLists.toArray(new HttpHost[]{});
+    }
+
+    private CredentialsProvider getCredentialsProvider() {
+        // 设置用户名、密码
+        CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
+        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(elasticsearchConfig.getUserName(), elasticsearchConfig.getPassword()));
+        return credentialsProvider;
+    }
+}

+ 111 - 0
edu-travel-common/edu-travel-common-elastic/src/main/java/edu/travel/elastic/EsIndexOperation.java

@@ -0,0 +1,111 @@
+package edu.travel.elastic;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
+import org.elasticsearch.action.support.master.AcknowledgedResponse;
+import org.elasticsearch.client.RequestOptions;
+import org.elasticsearch.client.RestHighLevelClient;
+import org.elasticsearch.client.indices.CreateIndexRequest;
+import org.elasticsearch.client.indices.GetIndexRequest;
+import org.elasticsearch.common.xcontent.XContentType;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.io.IOException;
+
+/**
+ * 操作ES索引
+ *
+ */
+@Slf4j
+@Service
+public class EsIndexOperation {
+ 
+    @Autowired
+    private RestHighLevelClient restHighLevelClient;
+    private final RequestOptions options = RequestOptions.DEFAULT;
+ 
+    /**
+     * 判断索引是否存在
+     */
+    public boolean checkIndex(String index) {
+        try {
+            return restHighLevelClient.indices().exists(new GetIndexRequest(index), options);
+        } catch (Exception e) {
+            log.error("EsIndexOperation checkIndex error.", e);
+        }
+        return Boolean.FALSE;
+    }
+ 
+    /**
+     * 创建索引
+     *
+     * @param indexName         es索引名
+     * @param esSettingFilePath es索引的alias、settings和mapping的配置文件
+     */
+    public boolean createIndex(String indexName, String esSettingFilePath) {
+        String aliases = null;
+        String mappings = null;
+        String settings = null;
+        if (StringUtils.isNotBlank(esSettingFilePath)) {
+            try {
+                String fileContent = FileUtils.readFileContent(esSettingFilePath);
+                if (StringUtils.isNotBlank(fileContent)) {
+                    JSONObject jsonObject = JSON.parseObject(fileContent);
+                    aliases = jsonObject.getString("aliases");
+                    mappings = jsonObject.getString("mappings");
+                    settings = jsonObject.getString("settings");
+                }
+            } catch (Exception e) {
+                log.error("createIndex error.", e);
+                return false;
+            }
+        }
+ 
+        if (checkIndex(indexName)) {
+            log.error("createIndex indexName:[{}]已存在", indexName);
+            return false;
+        }
+ 
+        CreateIndexRequest request = new CreateIndexRequest(indexName);
+        if ((StringUtils.isNotBlank(aliases))) {
+            request.aliases(aliases, XContentType.JSON);
+        }
+ 
+        if (StringUtils.isNotBlank(mappings)) {
+            request.mapping(mappings, XContentType.JSON);
+        }
+ 
+        if (StringUtils.isNotBlank(settings)) {
+            request.settings(settings, XContentType.JSON);
+        }
+ 
+        try {
+            this.restHighLevelClient.indices().create(request, options);
+            return true;
+        } catch (IOException e) {
+            log.error("EsIndexOperation createIndex error.", e);
+            return false;
+        }
+    }
+ 
+    /**
+     * 删除索引
+     */
+    public boolean deleteIndex(String indexName) {
+        try {
+            if (checkIndex(indexName)) {
+                DeleteIndexRequest request = new DeleteIndexRequest(indexName);
+                AcknowledgedResponse response = restHighLevelClient.indices().delete(request, options);
+                return response.isAcknowledged();
+            }
+        } catch (Exception e) {
+            log.error("EsIndexOperation deleteIndex error.", e);
+        }
+        return Boolean.FALSE;
+    }
+}

+ 45 - 0
edu-travel-common/edu-travel-common-elastic/src/main/java/edu/travel/elastic/FileUtils.java

@@ -0,0 +1,45 @@
+package edu.travel.elastic;
+
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.IOException;
+
+/**
+ * 文件操作类
+ */
+@Slf4j
+public class FileUtils {
+ 
+    /**
+     * 读取项目resources文件夹下的文件
+     *
+     * @param filePath 文件路径
+     * @return 文件内容
+     */
+    public static String readFileContent(String filePath) {
+        try {
+            BufferedReader reader = new BufferedReader(new FileReader(filePath));
+            String line;
+            StringBuilder stringBuilder = new StringBuilder();
+            while ((line = reader.readLine()) != null) {
+                stringBuilder.append(line);
+            }
+ 
+            reader.close();
+            return stringBuilder.toString();
+        } catch (IOException e) {
+            log.error("readFileContent error.", e);
+        }
+ 
+        return null;
+    }
+    
+ 
+    public static void main(String[] args) {
+        String filePath = "src/main/resources/es/mappings_test20231216.txt";
+        String fileContent = readFileContent(filePath);
+    }
+ 
+}

+ 1 - 0
edu-travel-common/pom.xml

@@ -23,6 +23,7 @@
         <module>edu-travel-common-openfeign</module>
         <module>edu-travel-common-cache</module>
         <module>edu-travel-common-upload</module>
+        <module>edu-travel-common-elastic</module>
     </modules>
 
     <properties>

+ 20 - 0
pom.xml

@@ -40,10 +40,30 @@
     <oss.version>3.10.2</oss.version>
     <cos.version>5.6.54</cos.version>
     <minio.version>7.0.2</minio.version>
+    <elasticsearch.version>7.10.0</elasticsearch.version>
   </properties>
   <dependencyManagement>
 
     <dependencies>
+      <!--引入es-high-level-client相关依赖  start-->
+      <dependency>
+        <groupId>org.elasticsearch</groupId>
+        <artifactId>elasticsearch</artifactId>
+        <version>${elasticsearch.version}</version>
+      </dependency>
+
+      <dependency>
+        <groupId>org.elasticsearch.client</groupId>
+        <artifactId>elasticsearch-rest-client</artifactId>
+        <version>${elasticsearch.version}</version>
+      </dependency>
+
+      <dependency>
+        <groupId>org.elasticsearch.client</groupId>
+        <artifactId>elasticsearch-rest-high-level-client</artifactId>
+        <version>${elasticsearch.version}</version>
+      </dependency>
+      <!--引入es-high-level-client相关依赖  end-->
       <dependency>
         <groupId>io.minio</groupId>
         <artifactId>minio</artifactId>