iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >springboot2+es7怎么使用RestHighLevelClient
  • 323
分享到

springboot2+es7怎么使用RestHighLevelClient

2023-07-02 15:07:23 323人浏览 泡泡鱼
摘要

这篇“SpringBoot2+es7怎么使用RestHighLevelClient”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这

这篇“SpringBoot2+es7怎么使用RestHighLevelClient”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“springboot2+es7怎么使用RestHighLevelClient”文章吧。

由于spring和es的集成并不是特别友好,es的高低版本兼容问题、api更新频率高等问题,所以我选择是官网提供的原生Client(RestHighLevelClient),但又不想去关注es的配置类以及和spring的集成配置、jar包冲突等问题,所以使用spring-boot-starter-data-elasticsearch

一、引入依赖jar

        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>        </dependency>

二、application.properties配置

spring.elasticsearch.rest.uris=Http://127.0.0.1:9200,http://127.0.0.1:9201,http://127.0.0.1:9202spring.elasticsearch.rest.connection-timeout=5sspring.elasticsearch.rest.read-timeout=30slogging.level.org.springframework.data.convert.CustomConversions=error

spring-boot-starter-data-elasticsearch中自动装配es的配置类:ElasticsearchRestClientAutoConfiguration、ElasticsearchRestClientProperties。

ElasticsearchRestClientAutoConfiguration:

@ConditionalOnClass({RestHighLevelClient.class})@ConditionalOnMissingBean({RestClient.class})@EnableConfigurationProperties({ElasticsearchRestClientProperties.class})public class ElasticsearchRestClientAutoConfiguration {     @Configuration(        proxyBeanMethods = false    )    @ConditionalOnMissingBean({RestHighLevelClient.class})    static class RestHighLevelClientConfiguration {        RestHighLevelClientConfiguration() {        }         @Bean        RestHighLevelClient elasticsearchRestHighLevelClient(RestClientBuilder restClientBuilder) {            return new RestHighLevelClient(restClientBuilder);        }    }     @Configuration(        proxyBeanMethods = false    )    @ConditionalOnMissingBean({RestClientBuilder.class})    static class RestClientBuilderConfiguration {        RestClientBuilderConfiguration() {        }         @Bean        RestClientBuilderCustomizer defaultRestClientBuilderCustomizer(ElasticsearchRestClientProperties properties) {            return new ElasticsearchRestClientAutoConfiguration.DefaultRestClientBuilderCustomizer(properties);        }         @Bean        RestClientBuilder elasticsearchRestClientBuilder(ElasticsearchRestClientProperties properties, ObjectProvider<RestClientBuilderCustomizer> builderCustomizers) {            HttpHost[] hosts = (HttpHost[])properties.getUris().stream().map(this::createHttpHost).toArray((x$0) -> {                return new HttpHost[x$0];            });            RestClientBuilder builder = RestClient.builder(hosts);            builder.setHttpClientConfiGCallback((httpClientBuilder) -> {                builderCustomizers.orderedStream().forEach((customizer) -> {                    customizer.customize(httpClientBuilder);                });                return httpClientBuilder;            });            builder.setRequestConfigCallback((requestConfigBuilder) -> {                builderCustomizers.orderedStream().forEach((customizer) -> {                    customizer.customize(requestConfigBuilder);                });                return requestConfigBuilder;            });            builderCustomizers.orderedStream().forEach((customizer) -> {                customizer.customize(builder);            });            return builder;        }         private HttpHost createHttpHost(String uri) {            try {                return this.createHttpHost(URI.create(uri));            } catch (IllegalArgumentException var3) {                return HttpHost.create(uri);            }        }         private HttpHost createHttpHost(URI uri) {            if (!StringUtils.hasLength(uri.getUserInfo())) {                return HttpHost.create(uri.toString());            } else {                try {                    return HttpHost.create((new URI(uri.getScheme(), (String)null, uri.getHost(), uri.getPort(), uri.getPath(), uri.getQuery(), uri.getFragment())).toString());                } catch (URISyntaxException var3) {                    throw new IllegalStateException(var3);                }            }        }    }}

ElasticsearchRestClientProperties: 

@ConfigurationProperties(    prefix = "spring.elasticsearch.rest")public class ElasticsearchRestClientProperties {    private List<String> uris = new ArrayList(Collections.singletonList("http://localhost:9200"));    private String username;    private String passWord;    private Duration connectionTimeout = Duration.ofSeconds(1L);    private Duration readTimeout = Duration.ofSeconds(30L);     public ElasticsearchRestClientProperties() {    }     public List<String> getUris() {        return this.uris;    }     public void setUris(List<String> uris) {        this.uris = uris;    }     public String getUsername() {        return this.username;    }     public void setUsername(String username) {        this.username = username;    }     public String getPassword() {        return this.password;    }     public void setPassword(String password) {        this.password = password;    }     public Duration getConnectionTimeout() {        return this.connectionTimeout;    }     public void setConnectionTimeout(Duration connectionTimeout) {        this.connectionTimeout = connectionTimeout;    }     public Duration getReadTimeout() {        return this.readTimeout;    }     public void setReadTimeout(Duration readTimeout) {        this.readTimeout = readTimeout;    }}

三、使用

ES基本操作持久层

@Repository@Slf4jpublic class EsRepository {     @Resource    private RestHighLevelClient highLevelClient;         public boolean existIndex(String index) {        try {            return highLevelClient.indices().exists(new GetIndexRequest(index), RequestOptions.DEFAULT);        } catch (IOException e) {            log.error("es持久层异常!index={}", index, e);        }        return Boolean.FALSE;    }         public boolean createIndex(String index, Map<String, Object> columnMap) {        if (existIndex(index)) {            return Boolean.FALSE;        }         CreateIndexRequest request = new CreateIndexRequest(index);        if (columnMap != null && columnMap.size() > 0) {            Map<String, Object> source = new HashMap<>();            source.put("properties", columnMap);            request.mapping(source);        }        try {            highLevelClient.indices().create(request, RequestOptions.DEFAULT);            return Boolean.TRUE;        } catch (IOException e) {            log.error("es持久层异常!index={}, columnMap={}", index, columnMap, e);        }        return Boolean.FALSE;    }         public boolean deleteIndex(String index) {        try {            if (existIndex(index)) {                AcknowledgedResponse response = highLevelClient.indices().delete(new DeleteIndexRequest(index), RequestOptions.DEFAULT);                return response.isAcknowledged();            }        } catch (Exception e) {            log.error("es持久层异常!index={}", index, e);        }        return Boolean.FALSE;    }         public boolean insert(String index, String JSONString) {        IndexRequest indexRequest = new IndexRequest(index);         indexRequest.id(new Snowflake().nextIdStr());        indexRequest.source(jsonString, XContentType.JSON);         try {            log.info("indexRequest={}", indexRequest);            IndexResponse indexResponse = highLevelClient.index(indexRequest, RequestOptions.DEFAULT);            log.info("indexResponse={}", indexResponse);            return Boolean.TRUE;        } catch (IOException e) {            log.error("es持久层异常!index={}, jsonString={}", index, jsonString, e);        }        return Boolean.FALSE;    }         public boolean update(String index, Map<String, Object> dataMap) {        UpdateRequest updateRequest = new UpdateRequest(index, dataMap.remove("id").toString());        updateRequest.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE);        updateRequest.doc(dataMap);        try {            highLevelClient.update(updateRequest, RequestOptions.DEFAULT);        } catch (IOException e) {            log.error("es持久层异常!index={}, dataMap={}", index, dataMap, e);            return Boolean.FALSE;        }        return Boolean.TRUE;    }         public boolean delete(String index, String id) {        DeleteRequest deleteRequest = new DeleteRequest(index, id);        try {            highLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);        } catch (IOException e) {            log.error("es持久层异常!index={}, id={}", index, id, e);            return Boolean.FALSE;        }        return Boolean.TRUE;    } }

ES查询持久层

@Repository@Slf4jpublic class EsSearchRepository {     @Resource    private RestHighLevelClient highLevelClient;         public EsQueryRespPO<Map<String, Object>> searchPage(EsQueryReqPO queryPO) {        // 默认分页参数设置        if (queryPO.getPageNum() == null) {            queryPO.setPageNum(1);        }        if (queryPO.getPageSize() == null) {            queryPO.setPageSize(10);        }         // 设置索引        SearchRequest searchRequest = new SearchRequest(queryPO.getIndex());         // 封装查询源对象        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();        searchRequest.source(sourceBuilder);         // 查询条件        sourceBuilder.query(queryPO.getQuery());         // 排序字段        if (StringUtils.isNotBlank(queryPO.getSortField()) && queryPO.getSort() != null) {            FieldSortBuilder order = new FieldSortBuilder(queryPO.getSortField()).order(queryPO.getSort());            sourceBuilder.sort(order);        }         // 开始行数,默认0        sourceBuilder.from((queryPO.getPageNum() - 1) * queryPO.getPageSize());        // 页大小,默认10        sourceBuilder.size(queryPO.getPageSize());         // 查询结果        SearchResponse searchResponse = null;        try {            // log.info("es查询请求对象:searchRequest={}", searchRequest);            log.info("es查询请求对象source:sourceBuilder={}", searchRequest.source());            // 执行搜索            searchResponse = highLevelClient.search(searchRequest, RequestOptions.DEFAULT);            log.info("es查询响应结果:searchResponse={}", searchResponse);        } catch (IOException e) {            log.error("es查询,IO异常!searchRequest={}", searchRequest, e);            // 异常处理            return EsQueryRespPO.error("es查询,IO异常!");        }         if (RestStatus.OK.equals(searchResponse.status())) {            // 解析对象            SearchHit[] hits = searchResponse.getHits().getHits();            // 获取source            List<Map<String, Object>> sourceList = Arrays.stream(hits).map(SearchHit::getSourceAsMap).collect(Collectors.toList());            long totalHits = searchResponse.getHits().getTotalHits().value;            return EsQueryRespPO.success(sourceList, queryPO.getPageNum(), queryPO.getPageSize(), totalHits);        } else {            log.error("es查询返回的状态码异常!searchResponse.status={}, searchRequest={}", searchResponse.status(), searchRequest);            return EsQueryRespPO.error("es查询返回的状态码异常!");        }    }         public EsQueryRespPO<AggregationBucketPO> searchAggregation(EsQueryReqPO queryPO) {        // 设置索引        SearchRequest searchRequest = new SearchRequest(queryPO.getIndex());         // 封装查询源对象        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();        searchRequest.source(sourceBuilder);         // 查询条件        sourceBuilder.query(queryPO.getQuery());         // 排序字段        if (StringUtils.isNotBlank(queryPO.getSortField()) && queryPO.getSort() != null) {            FieldSortBuilder order = new FieldSortBuilder(queryPO.getSortField()).order(queryPO.getSort());            sourceBuilder.sort(order);        }         // 页大小0,只返回聚合结果        sourceBuilder.size(0);         // 设置聚合查询,可以设置多个聚合查询条件,只要聚合查询命名不同就行        // 聚合分组条件, group by        sourceBuilder.aggregation(queryPO.getTermsAggregation());        // 聚合统计条件, count分组后的数据,计算分组后的总大小        sourceBuilder.aggregation(queryPO.getCardinalityAggregation());         // 查询结果        SearchResponse searchResponse = null;        try {            // log.info("es查询请求对象:searchRequest={}", searchRequest);            log.info("es查询请求对象source:sourceBuilder={}", searchRequest.source());            // 执行搜索            searchResponse = highLevelClient.search(searchRequest, RequestOptions.DEFAULT);            log.info("es查询响应结果:searchResponse={}", searchResponse);        } catch (IOException e) {            log.error("es查询,IO异常!searchRequest={}", searchRequest, e);            return EsQueryRespPO.error("es查询,IO异常!");        }         if (RestStatus.OK.equals(searchResponse.status())) {            // 解析对象            Aggregations aggregations = searchResponse.getAggregations();             long docTotal = searchResponse.getHits().getTotalHits().value;             // 遍历terms聚合结果            Terms terms = aggregations.get(queryPO.getTermsAggregation().getName());            List<AggregationBucketPO> bucketList = terms.getBuckets().stream().map(bucket -> {                String key = bucket.geTKEyAsString();                long docCount = bucket.getDocCount();                return new AggregationBucketPO(key, docCount, docTotal);            }).collect(Collectors.toList());             // 总数量            Cardinality cardinality = aggregations.get(queryPO.getCardinalityAggregation().getName());            long totalHits = cardinality.getValue();             return EsQueryRespPO.success(bucketList, queryPO.getPageNum(), queryPO.getPageSize(), totalHits);        } else {            log.error("es查询返回的状态码异常!searchResponse.status={}, searchRequest={}", searchResponse.status(), searchRequest);            return EsQueryRespPO.error("es查询返回的状态码异常!");        }    }}

其中,EsQueryReqPO、EsQueryRespPO、AggregationBucketPO等类如下:

@Datapublic class EsQueryReqPO {         String[] index;         QueryBuilder query;         String sortField;         SortOrder sort;         private Integer pageNum;         private Integer pageSize;         private TermsAggregationBuilder termsAggregation;         private CardinalityAggregationBuilder cardinalityAggregation;}@Data@NoArgsConstructor@AllArgsConstructorpublic class EsQueryRespPO<T> {         private Boolean success;         private String message;         private Integer pageNum;         private Integer pageSize;         private Long totalSize;         private List<T> sourceList;     public static <T> EsQueryRespPO<T> success(List<T> sourceList, Integer pageNum, Integer pageSize,                                               Long totalSize) {        EsQueryRespPO<T> esQueryRespPO = new EsQueryRespPO<>();        esQueryRespPO.setSuccess(true);        esQueryRespPO.setSourceList(sourceList);        esQueryRespPO.setPageNum(pageNum);        esQueryRespPO.setPageSize(pageSize);        esQueryRespPO.setTotalSize(totalSize);        return esQueryRespPO;    }     public static EsQueryRespPO error() {        EsQueryRespPO esQueryRespPO = new EsQueryRespPO();        esQueryRespPO.setSuccess(false);        esQueryRespPO.setMessage("es查询异常");        return esQueryRespPO;    }     public static EsQueryRespPO error(String message) {        EsQueryRespPO esQueryRespPO = new EsQueryRespPO();        esQueryRespPO.setSuccess(false);        esQueryRespPO.setMessage(message);        return esQueryRespPO;    } }
@Data@NoArgsConstructor@AllArgsConstructorpublic class AggregationBucketPO {         private String key;         private Long docCount;         private Long docTotal; }

ES多级(二级)聚合分桶查询

import com.yy.armor.manager.common.exception.EsException;import com.yy.armor.manager.persist.es.po.AggregationBucketPO;import com.yy.armor.manager.persist.es.po.EsMultiAggregationReqPO; import java.io.IOException;import java.util.List;import java.util.stream.Collectors;import javax.annotation.Resource; import lombok.extern.slf4j.Slf4j;import org.apache.commons.collections4.CollectionUtils;import org.apache.commons.lang3.StringUtils;import org.apache.pulsar.shade.org.apache.commons.compress.utils.Lists;import org.elasticsearch.action.search.SearchRequest;import org.elasticsearch.action.search.SearchResponse;import org.elasticsearch.client.RequestOptions;import org.elasticsearch.client.RestHighLevelClient;import org.elasticsearch.rest.RestStatus;import org.elasticsearch.search.aggregations.AggregationBuilders;import org.elasticsearch.search.aggregations.bucket.terms.Terms;import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;import org.elasticsearch.search.builder.SearchSourceBuilder;import org.elasticsearch.search.sort.FieldSortBuilder;import org.springframework.stereotype.Repository;  @Repository@Slf4jpublic class EsSearchRepository {     @Resource    private RestHighLevelClient highLevelClient;          public List<AggregationBucketPO> searchMultiAggregation(EsMultiAggregationReqPO reqPO) {        // 设置索引        SearchRequest searchRequest = new SearchRequest(reqPO.getIndex());         // 封装查询源对象        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();        searchRequest.source(sourceBuilder);         // 查询条件        sourceBuilder.query(reqPO.getQuery());         // 排序字段        if (StringUtils.isNotBlank(reqPO.getSortField()) && reqPO.getSort() != null) {            FieldSortBuilder order = new FieldSortBuilder(reqPO.getSortField()).order(reqPO.getSort());            sourceBuilder.sort(order);        }         // 页大小0,只返回聚合结果        sourceBuilder.size(0);         // 聚合分桶。创建terms桶聚合,聚合名字=terms_by_XXX, 字段=XXX        TermsAggregationBuilder termsAggregationBuilder = AggregationBuilders.terms("terms_by_" + reqPO.getField()).field(reqPO.getField());        if (reqPO.getFieldSize() != null) {            termsAggregationBuilder.size(reqPO.getFieldSize());        }        // 二级聚合分桶        TermsAggregationBuilder subTermsAggregationBuilder = AggregationBuilders.terms("terms_by_" + reqPO.getSubField()).field(reqPO.getSubField());        if (reqPO.getSubFieldSize() != null) {            subTermsAggregationBuilder.size(reqPO.getSubFieldSize());        }        termsAggregationBuilder.subAggregation(subTermsAggregationBuilder);         // 聚合分组条件        sourceBuilder.aggregation(termsAggregationBuilder);         // 查询结果        SearchResponse searchResponse = null;        try {            log.info("es查询请求对象source:sourceBuilder={}", searchRequest.source());            // 执行搜索            searchResponse = highLevelClient.search(searchRequest, RequestOptions.DEFAULT);            log.info("es查询响应结果:searchResponse={}", searchResponse);        } catch (IOException e) {            log.error("es查询,IO异常!searchRequest={}", searchRequest, e);            throw new EsException("es查询,IO异常!");        }         if (RestStatus.OK.equals(searchResponse.status())) {            // 遍历terms聚合结果            Terms terms = searchResponse.getAggregations().get(termsAggregationBuilder.getName());            List<AggregationBucketPO> bucketList = terms.getBuckets().stream().map(bucket -> {                // 一级聚合分桶的数据                String key = bucket.getKeyAsString();                long docCount = bucket.getDocCount();                // 二级聚合分桶的数据                Terms subTerms = bucket.getAggregations().get(subTermsAggregationBuilder.getName());                List<AggregationBucketPO> subBucketList = convertTerms(subTerms);                return new AggregationBucketPO(key, docCount, subBucketList);            }).collect(Collectors.toList());             return bucketList;        } else {            log.error("es查询返回的状态码异常!searchResponse.status={}, searchRequest={}", searchResponse.status(), searchRequest);            throw new EsException("es查询返回的状态码异常!");        }    }     private List<AggregationBucketPO> convertTerms(Terms terms) {        if (CollectionUtils.isEmpty(terms.getBuckets())) {            return Lists.newArrayList();        }         return terms.getBuckets().stream().map(bucket -> {            String key = bucket.getKeyAsString();            long docCount = bucket.getDocCount();            return new AggregationBucketPO(key, docCount);        }).collect(Collectors.toList());    }}

其中,EsMultiAggregationReqPO、AggregationBucketPO类如下:

@Datapublic class EsMultiAggregationReqPO {            String[] index;         QueryBuilder query;         private String field;         private String subField;         private Integer fieldSize;         private Integer subFieldSize;         String sortField;         SortOrder sort;}
@Data@NoArgsConstructor@AllArgsConstructorpublic class AggregationBucketPO {        private String key;         private Long docCount;         private List<AggregationBucketPO> subBucketList;     public AggregationBucketPO(String key, Long docCount) {        this.key = key;        this.docCount = docCount;    }}

二级聚合分桶测试代码 

    @PostConstruct    private void init() {        // 查询对象的封装        EsMultiAggregationReqPO reqPO = new EsMultiAggregationReqPO();         reqPO.setIndex(new String[]{"test_log"});         List<Long> ids = Lists.newArrayList();        ids.add(140L);        ids.add(141L);        ids.add(142L);        QueryBuilder queryBuilder4 = QueryBuilders.termsQuery("eventId", ids);        BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery().must(queryBuilder4);        reqPO.setQuery(queryBuilder);         reqPO.setField("eventId");        reqPO.setFieldSize(9999);        reqPO.setSubField("riskFlag");         // 执行查询        List<AggregationBucketPO> esQueryRespPO = searchMultiAggregation(reqPO);        System.out.println("esQueryRespPO=" + esQueryRespPO);    }

其它

如果没有用spring-boot-starter-data-elasticsearch来自动注入es组件,那么需要自己做es client的注入,es配置类如下:

@Configurationpublic class EsClientConfig {     @Value("${spring.elasticsearch.rest.uris}")    private List<String> uris;     @Bean    public RestHighLevelClient restHighLevelClient() {        List<HttpHost> httpHostList = uris.stream().map(HttpHost::create).collect(Collectors.toList());        HttpHost[] httpHost = new HttpHost[uris.size()];        httpHostList.toArray(httpHost);        RestClientBuilder clientBuilder = RestClient.builder(httpHost);        return new RestHighLevelClient(clientBuilder);    } }

Snowflake是hutool包里的,导包:

        <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->        <dependency>            <groupId>cn.hutool</groupId>            <artifactId>hutool-all</artifactId>            <version>5.7.14</version>        </dependency>

聚合查询的测试用例:

@RunWith(SpringJUnit4ClassRunner.class)@SpringBootTest(classes = StartApplication.class)public class EsTest {     @Resource    private EsSearchRepository esSearchRepository;     @Test    public void testSearchAggregation() {        // 查询对象的封装        EsQueryReqPO queryPO = new EsQueryReqPO();        queryPO.setIndex(new String[]{"yzh2", "yzh3"});        queryPO.setPageNum(1);        queryPO.setPageSize(10);         // 时间戳范围        QueryBuilder queryBuilder1 = QueryBuilders.rangeQuery("timestamp")            .from(System.currentTimeMillis() - 1000)            .to(System.currentTimeMillis());        // 登录标识        QueryBuilder queryBuilder2 = QueryBuilders.terMQuery("name", "yang");        BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery().must(queryBuilder1).must(queryBuilder2);        queryPO.setQuery(queryBuilder);         // 根据userName分组。创建terms桶聚合,聚合名字=terms_by_userName, 字段=payload.userName.keyword        TermsAggregationBuilder termsAggregationBuilder = AggregationBuilders            .terms("terms_by_userName").field("payload.userName.keyword");        termsAggregationBuilder.size(queryPO.getPageSize() * queryPO.getPageNum());        termsAggregationBuilder.subAggregation(new BucketSortPipelineAggregationBuilder("bucket_field", null)            .from((queryPO.getPageNum() - 1) * queryPO.getPageSize()).size(queryPO.getPageSize()));        queryPO.setTermsAggregation(termsAggregationBuilder);         // 根据userName聚合count统计. cardinality名=count_userName, 字段=payload.userName.keyword        CardinalityAggregationBuilder cardinalityAggregationBuilder = AggregationBuilders            .cardinality("count_userName").field("payload.userName.keyword");        queryPO.setCardinalityAggregation(cardinalityAggregationBuilder);         // 执行查询        EsQueryRespPO<AggregationBucketPO> esQueryRespPO = esSearchRepository.searchAggregation(queryPO);    }}

以上就是关于“springboot2+es7怎么使用RestHighLevelClient”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: springboot2+es7怎么使用RestHighLevelClient

本文链接: https://www.lsjlt.com/news/342486.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • springboot2+es7怎么使用RestHighLevelClient
    这篇“springboot2+es7怎么使用RestHighLevelClient”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这...
    99+
    2023-07-02
  • springboot2+es7使用RestHighLevelClient的示例代码
    目录一、引入依赖jar二、application.properties配置三、使用其它由于spring和es的集成并不是特别友好,es的高低版本兼容问题、api更新频率高等问题,所以...
    99+
    2024-04-02
  • RestHighLevelClient-简单使用
    一、创建连接 !ps:RestHighLevelClient是官方指定的连接API。另外一个是TransportClient,但是TransportClient这个是已经废弃不用的,所以会在ES8.0之后完全移除,也就是说8.0之后就无法使...
    99+
    2024-04-02
  • SpringBoot2中怎么使用Nacos组件
    SpringBoot2中怎么使用Nacos组件,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、Nacos基础简介1、概念简介Nacos 是构建以“服务”为中心的现代应用架...
    99+
    2023-06-02
  • ES7中Async/await如何使用
    这篇文章给大家介绍ES7中Async/await如何使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Promise 对象用于表示一个异步操作的最终状态(完成或失败),以及其返回的值。...
    99+
    2024-04-02
  • SpringBoot2 中怎么使用Druid连接池
    这篇文章给大家介绍SpringBoot2 中怎么使用Druid连接池,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、Druid连接池1、druid简介Druid连接池是阿里巴巴开源的数据库连接池项目。Druid连接池...
    99+
    2023-06-02
  • SpringBoot2底层注解@Import怎么使用
    这篇文章主要介绍“SpringBoot2底层注解@Import怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringBoot2底层注解@Import怎么使用”文章能帮助大家解决问题。@I...
    99+
    2023-06-30
  • ES7中Decorator有什么用
    小编给大家分享一下ES7中Decorator有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Decorator 提供了一种...
    99+
    2024-04-02
  • SpringBoot2底层注解@Conditional和@ImportResource怎么使用
    这篇“SpringBoot2底层注解@Conditional和@ImportResource怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下...
    99+
    2023-06-30
  • SpringBoot2的JUnit5与指标监控怎么使用
    这篇文章主要介绍“SpringBoot2的JUnit5与指标监控怎么使用”,在日常操作中,相信很多人在SpringBoot2的JUnit5与指标监控怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Spr...
    99+
    2023-06-29
  • springboot2中使用@JsonFormat注解不生效怎么解决
    这篇“springboot2中使用@JsonFormat注解不生效怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“sp...
    99+
    2023-06-29
  • springboot2如何使用activiti6 idea插件
    这篇文章给大家分享的是有关springboot2如何使用activiti6 idea插件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Activiti BPMN visualizer插件import&n...
    99+
    2023-06-29
  • es7中的async、await使用方法示例详解
    目录一、前言二、async 和 await 的基础使用三、async \ await使用场景四、await返回打印测试五、总结async、await 是es7里面的新语法,它的作用就...
    99+
    2023-01-28
    async await使用 async await示例
  • SpringBoot2 中怎么使用 QuartJob 实现定时器实时管理
    本篇文章给大家分享的是有关SpringBoot2 中怎么使用 QuartJob 实现定时器实时管理,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、QuartJob简介1、一句...
    99+
    2023-06-02
  • SpringBoot2动态@Value怎么实现
    本篇内容介绍了“SpringBoot2动态@Value怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!具体的实现步骤分为如下几步1.通...
    99+
    2023-06-08
  • SpringBoot2中怎么整合Mybatis框架
    SpringBoot2中怎么整合Mybatis框架,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、Mybatis框架1、mybatis简介MyBatis 是一款优秀的持久层框...
    99+
    2023-06-02
  • SpringBoot2怎么使用FreeMarker模板完成页面静态化处理
    这篇文章主要介绍“SpringBoot2怎么使用FreeMarker模板完成页面静态化处理”,在日常操作中,相信很多人在SpringBoot2怎么使用FreeMarker模板完成页面静态化处理问题上存在疑惑,小编查阅了各式资料,整理出简单好...
    99+
    2023-07-06
  • springboot2怎么禁用自带tomcat的session功能
    这篇文章主要介绍“springboot2怎么禁用自带tomcat的session功能”,在日常操作中,相信很多人在springboot2怎么禁用自带tomcat的session功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法...
    99+
    2023-06-25
  • SpringBoot2中怎么整合Kafka组件
    SpringBoot2中怎么整合Kafka组件,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、搭建Kafka环境1、下载解压-- 下载wget http:...
    99+
    2023-06-02
  • SpringBoot2中怎么配置Actuator组件
    这期内容当中小编将会给大家带来有关SpringBoot2中怎么配置Actuator组件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、Actuator简介1、监控组件作用在生产环境中,需要实时或定期监控...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作