springBoot 集成阿里云Elasticsearch

这篇具有很好参考价值的文章主要介绍了springBoot 集成阿里云Elasticsearch。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

    原系统使用tcp方式接入ES,使用 ElasticsearchTemplate API方式交互ES。原springes的yml配置如下:

spring:
  data:
    elasticsearch:
      cluster-nodes: 192.168.10.11:9300
      cluster-name: xxxxxes集群名称

        由于接入阿里云的ES,且加上了X-PACK验证模式,必须有用户名和密码。故拉取新的分支支持阿里云ES的配置。

springMvc模式配置

        由于A项目是SpringMvc方式的配置,下面讲一下遇到的问题以及最后的配置,服务器阿里云用的是ES5。故参考了阿里云官网的配置。x-pack-transport 5.3.3。在配置是一开始仅引入了x-pack-transport。并未引入elasticsearch 5.3.3。部署就发生了 NoClassFound后者 not exists method等错误。诸如此类的问题都是x-pack-transport 和springboot里自带的ealsticsearch不兼容所致。使用mvn:dpendency:tree查看 项目的pop依赖,看出来有jar包冲突,主要涉及:elasticsearch和transport-nettyx-client。x-pack-transport中引入了transport-netty3-client。故排除原springboot的配置,自行引入相应版本。

        在解决ES的冲突问题时,其实也很烦,一方面不知道该引入具体什么版本,另一方面是在是网络欠佳,工具欠佳不知道具体的每个artifactId有什么版本。

 <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
                <version>2.1.7.RELEASE</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.elasticsearch.client</groupId>
                        <artifactId>transport</artifactId>
                    </exclusion>
                        <exclusion>
                            <groupId>org.elasticsearch</groupId>
                            <artifactId>elasticsearch</artifactId>
                        </exclusion>
                    <exclusion>

                    <groupId>org.elasticsearch.plugin</groupId>
                    <artifactId>transport-netty4-client</artifactId>
                    </exclusion>

                </exclusions>

            </dependency>
            <dependency>
                <groupId>org.elasticsearch.client</groupId>
                <artifactId>x-pack-transport</artifactId>
                <version>5.3.3</version>
            </dependency>

            <dependency>
                <groupId>org.elasticsearch</groupId>
                <artifactId>elasticsearch</artifactId>
                <version>5.3.3</version>
            </dependency>

@Configuration
public class EsConfig {


    @Value("${elasticsearch.host}")
    private String esHost;

    @Value("${elasticsearch.port}")
    private Integer port;

    @Value("${elasticsearch.name}")
    private String name;

    @Value("${elasticsearch.user}")
    private String user;


    @Value("${elasticsearch.password}")
    private String password;


    @Bean
    public TransportClient transportClient() throws UnknownHostException {

        TransportClient client = new PreBuiltXPackTransportClient(Settings.builder()
                .put("cluster.name", name)
                .put("xpack.security.user", user + ":" + password)
                .build())
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(esHost), port));

        return client;

    }

    <bean name="elasticsearchTemplate" class="org.springframework.data.elasticsearch.core.ElasticsearchTemplate">
        <constructor-arg name="client" ref="transportClient"/>
    </bean>

SpringBoot restClient配置

       接下来是另一个项目:springBoot的方式,一开始其实也想使用本文项目中上一个项目的配置,发现根本不行,提示缺少settings的某个方法,于是干脆直接把项目的ElasticsearchTemplate 替换为ElasticsearchRestTemplate。这里不得不吐槽下Template的设计,这两个的api一模一样,但是他们的父类反而有一个方法返回参数是一个抽象类,也导致了注入的对象不能使用抽象类。

        部署过程中也出现版本冲突问题:错误如下

{"root_cause":[{"type":"illegal_argument_exception","reason":"request [/pcc_es/area_su_es/_search] contains unrecognized parameters: [ignore_throttled], [rest_total_hits_as_int]"}],"type":"illegal_argument_exception","reason":"request [/pcc_es/area_su_es/_search] contains unrecognized parameters: [ignore_throttled], [rest_total_hits_as_int]"},"status":400}

ES和springboot版本对应如下

springboot集成es集群,Spring,elasticsearch,spring boot,阿里云文章来源地址https://www.toymoban.com/news/detail-596748.html

项目配置如下

 <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
                <version>2.0.6.RELEASE</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.elasticsearch</groupId>
                        <artifactId>elasticsearch</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>org.elasticsearch</groupId>
                <artifactId>elasticsearch</artifactId>
                <version>6.6.2</version>
            </dependency>

            <dependency>
                <groupId>org.elasticsearch.client</groupId>
                <artifactId>elasticsearch-rest-high-level-client</artifactId>
                <version>6.6.2</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.elasticsearch</groupId>
                        <artifactId>elasticsearch</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

@Configuration
@Log4j2
public class ElasticSearchConfig {
    @PostConstruct
    void init() {
        log.info("update es config");
        System.setProperty("es.set.netty.runtime.available.processors", "false");
    }

    @Value("${elasticsearch.host}")
    private String esHost;

    @Value("${elasticsearch.port}")
    private Integer port;

    @Value("${elasticsearch.name}")
    private String name;

    @Value("${elasticsearch.user}")
    private String user;


    @Value("${elasticsearch.password}")
    private String password;


    @Bean
    public RestHighLevelClient client() throws IOException {
        try{

        }catch (Exception e){

        }

        // 阿里云Elasticsearch集群需要basic auth验证。
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        //访问用户名和密码为您创建阿里云Elasticsearch实例时设置的用户名和密码,也是Kibana控制台的登录用户名和密码。
        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(user, password));

        // 通过builder创建rest client,配置http client的HttpClientConfigCallback。
        // 单击所创建的Elasticsearch实例ID,在基本信息页面获取公网地址,即为ES集群地址。
        RestClientBuilder builder = RestClient.builder(new HttpHost(esHost, port, "http"))
                .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
                    @Override
                    public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
                        return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
                    }
                });


        // RestHighLevelClient实例通过REST low-level client builder进行构造。
        RestHighLevelClient restHighLevelClient = new RestHighLevelClient(builder);
        log.info("开始访问ES");
        try{
            GetRequest getRequest = new GetRequest("pcc_check_audit");
            BasicHeader[] headerList = new BasicHeader[]{};
            boolean exists = restHighLevelClient.exists(getRequest, headerList);
            log.info("访问ES结果" + exists);
        }catch (Exception e){
            log.error("访问ES失败{}",e.getMessage(),e);
        }
        return restHighLevelClient;


    }



}

到了这里,关于springBoot 集成阿里云Elasticsearch的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Boot集成ES

    POM依赖 配置文件 示例代码

    2024年02月11日
    浏览(29)
  • (一)springboot集成ES

    集成之前需要注意ES版本和Springboot的版本对应,这个可以再springboot官网查看。此处我选择的es版本为:7.10.1 springboot版本2.3.12.RELEASE。 引入pom.xml 使用RestHighLevelClient,代码如下: 注意事项:RestHighLevelClient 长时间没有流量访问,隔段时间访问可能出现socket超时或者8,000millisec

    2024年02月14日
    浏览(25)
  • Es集成Springboot

    ES:下载中心 - Elastic 中文社区   安装需要JDK,JAVA_HOME ElasticSearch 下载并解压,进入 bin 目录,双击 elasticsearch.bat 就能启动,访问地址 localhost:9200    注:本文使用的的ES版本为7.17.0 注意ES版本与引入ES客户端对应,否则会出现一些api调用兼容问题。

    2024年02月12日
    浏览(20)
  • springboot集成ES

    1.引入pom依赖 2.application 配置 3.JavaBean配置以及ES相关注解 3.1 Student实体类 3.2 Teacher实体类 3.3 Headmaster 实体类 4. 启动类配置 5.elasticsearchRestTemplate 新增 ==5.1 createIndex putMapping 创建索引及映射== 5.1.1 Controller层 5.1.2 service层 5.1.3 serviceimpl层 createIndex putMapping 创建索引及映射测试结果

    2024年02月03日
    浏览(68)
  • springBoot 集成阿里云Elasticsearch

        原系统使用tcp方式接入ES,使用 ElasticsearchTemplate API方式交互ES。原springes的yml配置如下:         由于接入阿里云的ES,且加上了X-PACK验证模式,必须有用户名和密码。故拉取新的分支支持阿里云ES的配置。         由于A项目是SpringMvc方式的配置,下面讲一下遇到的问题

    2024年02月16日
    浏览(27)
  • springboot集成阿里云短信验证码

    1.添加pom.xml依赖 2.application.yml添加配置文件 3.创建随机验证码工具类 4.创建发送验证码工具类 注意事项 :在 application.yml 中配置了 accessKeyID等参数 ,想在一个工具类里面的静态方法使用,于是使用了静态变量。使用 @Value 注解获取值,如下: debug发现获取不到,为 null 。原因

    2024年02月01日
    浏览(36)
  • Spring Boot集成ES7.10

        在Spring boot中主要有Java REST Client、spring-data-elasticsearch两种方式,这里建议使用Elasticsearch官方提供的Java High Level REST Client来集成。 1,添加配置文件添加连接信息 2,添加ES配置类 基础的分页参数 封装的分页返回对象

    2024年02月11日
    浏览(32)
  • SpringBoot集成-阿里云对象存储OSS

    阿里云对象存储 OSS (Object Storage Service),是一款海量、安全、低成本、高可靠的云存储服务。使用 OSS,你可以通过网络随时存储和调用包括文本、图片、音频和视频等在内的各种文件。 登录阿里云后进入阿里云控制台首页选择 对象存储 OSS 服务 开通服务 创建Bucket 填写

    2024年02月06日
    浏览(36)
  • springboot如何集成redis哨兵集群?

    redis主从集群和redis sentinel集群都配置完毕了, 现在我们需要了解spring boot 如何连接上该集群 才能用上这两个集群带来的便利 为什么需要关注这个问题? 怎么配置? 记住. 本章是针对redis已经配置了主从集群和哨兵集群的, 而非cluster集群模式 没有 Redis Sentinel 架构之前,如果主节

    2024年02月09日
    浏览(41)
  • SpringBoot集成Easy-Es

    Easy-Es(简称EE)是一款基于ElasticSearch(简称Es)官方提供的RestHighLevelClient打造的ORM开发框架,在 RestHighLevelClient 的基础上,只做增强不做改变,为简化开发、提高效率而生 1、添加依赖 2、配置信息 3、启动类中添加 @EsMapperScan 注解,扫描 Mapper 文件夹 4、实体类和mapper 5、测试 h

    2024年02月02日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包