本文mark了springboot中集成elasticsearch,并且实现连接带有shield权限管理的elasticsearch的方法。

tips:首先建议java client版本和elasticsearch版本一致。不然可能会出现各种问题。

1、首先在pom中加入如下依赖

<repositories>
<repository>
<id>elasticsearch-releases</id>
<url>https://maven.elasticsearch.org/releases</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.elasticsearch.plugin</groupId>
<artifactId>shield</artifactId>
<version>2.3.3</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>2.3.3</version>
</dependency>
</dependencies>

2、其次编写ESClient类,实现ES连接

1)这里需要注意的是语法TransportClient.builder().addPlugin(ShieldPlugin.class),激活shield插件,不然还是会爆noNodesAvailable,小心。

2)java连接elasticsearch和python不一样,java使用的tcp端口,一般是8300,而python使用的是web端口,一般是9300。

3)一般会关闭嗅探,sniff=false。不然可能会报noNodesAvailable。

package com.xiaoju.dqa.sentinel.client.es;

import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.shield.ShieldPlugin; import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List; public class ESClient { private TransportClient client;
private String cluster;
private String addressListString;
private boolean sniff;
private String shield; public void setCluster(String cluster) {
this.cluster = cluster;
}
public void setAddressListStr(String addressListString) {
this.addressListString = addressListString;
}
public void setSniff(boolean sniff) {
this.sniff = sniff;
}
public void setShield(String shield) {
this.shield = shield;
} public void init() throws Exception{
try {
Settings settings = getSettings();
TransportClient transportClient = null;
transportClient = TransportClient.builder().addPlugin(ShieldPlugin.class).settings(settings).build();
List<TransportAddress> addressList = getAddressList(addressListString);
for (TransportAddress address : addressList) {
transportClient.addTransportAddress(address);
}
this.client = transportClient;
} catch (IOException ex) {
throw ex;
} catch (Exception ex) {
throw ex;
}
} public void close() throws Exception {
if (client != null) {
client.close();
}
client = null;
} public Client getClient() {
if (this.client == null) {
throw new UnsupportedOperationException("client is not init");
}
return this.client;
} private Settings getSettings() throws Exception {
Settings.Builder settingBuilder = Settings.settingsBuilder();
settingBuilder.put("cluster.name", cluster);
settingBuilder.put("shield.user", shield);
settingBuilder.put("client.transport.sniff", sniff);
settingBuilder.put("transport.address.list", addressListString);
return settingBuilder.build();
} private synchronized List<TransportAddress> getAddressList(String addressListString)
throws UnknownHostException {
List<TransportAddress> addressList = new ArrayList<TransportAddress>(); if (addressListString != null && !addressListString.trim().isEmpty()) {
try {
String[] addressStringArray = addressListString.trim().split(
",");
for (String addressString : addressStringArray) {
String[] pair = addressString.trim().split(":");
String host = pair[0].trim();
int port = Integer.parseInt(pair[1].trim());
addressList.add(new InetSocketTransportAddress(InetAddress
.getByName(host), port));
}
} catch (Exception e) {
throw new IllegalArgumentException(
"transport.address.list has invalid format");
}
}
return addressList;
} }

3、configuration

实现配置和实例化,注意esClient.setShield(shield);

shield格式如下:es.shield.user=98:qHa3pehd用户名:密码

package com.xiaoju.dqa.sentinel.configuration;

import com.xiaoju.dqa.sentinel.client.es.ESClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; @Configuration
public class ESConfiguration {
@Value("${es.cluster.name}")
private String cluster;
@Value("${es.client.transport.sniff}")
private boolean sniff;
@Value("${es.transport.address.list}")
private String addressListString;
@Value("${es.shield.user}")
private String shield; @Bean(initMethod = "init", destroyMethod = "close")
public ESClient esClient() {
ESClient esClient = new ESClient();
esClient.setCluster(cluster);
esClient.setSniff(sniff);
esClient.setAddressListStr(addressListString);
esClient.setShield(shield);
return esClient;
}
}

4、配置文件

#  **********  ES 配置  **********
es.cluster.name=bigdata-arius-vip
es.client.transport.sniff=false
es.transport.address.list=bigdata-arius-ser200.gz01:8300,bigdata-arius-ser201.gz01:8300,bigdata-arius-ser202.gz01:8300,bigdata-arius-ser203.gz01:8300,bigdata-arius-ser204.gz01:8300,bigdata-arius-ser205.gz01:8300,bigdata-arius-ser206.gz01:8300
es.shield.user=98:qHa3pehd

java通过shield链接Elasticsearch的更多相关文章

  1. java课程设计之--Elasticsearch篇

    一.团队课程设计博客链接 https://www.cnblogs.com/Rasang/p/12169899.html 二.个人负责模块或任务说明 2.1Elasticsearch简介 Elastic ...

  2. Java生成短链接

    为什么要生成短链接 微博之所以要是使用短链接,主要是因为微博只允许发140 字,如果链接地址太长的话,那么发送的字数将大大减少. 那么使用短链接的作用有哪些呢?1.字数,2.统计,3.监控,4.过滤 ...

  3. Java获取项目当前请求的全部URL,Java获取Referer,Java获取完整链接地址URL

    Java获取项目当前请求的全部URL,Java获取Referer,Java获取完整链接地址URL >>>>>>>>>>>>> ...

  4. java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串

    java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串 package com.zdz.test; im ...

  5. springboot整合elasticsearch出错:java.lang.NoClassDefFoundError: org/elasticsearch/plugins/NetworkPlugin

    Caused by: java.lang.NoClassDefFoundError: org/elasticsearch/plugins/NetworkPlugin at java.lang.Clas ...

  6. Java JDBC 数据库链接小结随笔

    Java JDBC 数据库链接小结随笔 一.链接数据库的步骤 二.关于Statement  和  PrepareStatement 两者区别 用法 三.关于 ResultSet 的一些小结 四.自定义 ...

  7. Java连接简单使用ElasticSearch

    目录 1. 添加依赖 2. 代码,无账号密码 3. 代码,有账号密码,并且是https方式 4. 参考文章 1. 添加依赖 <!-- https://mvnrepository.com/arti ...

  8. java dump 内存分析 elasticsearch Bulk异常引发的Elasticsearch内存泄漏

    Bulk异常引发的Elasticsearch内存泄漏 2018年8月24日更新: 今天放出的6.4版修复了这个问题. 前天公司度假部门一个线上ElasticSearch集群发出报警,有Data Nod ...

  9. java优雅的使用elasticsearch api

    本文给出一种优雅的拼装elasticsearch查询的方式,可能会使得使用elasticsearch的方式变得优雅起来,使得代码结构很清晰易读. 建立elasticsearch连接部分请参看另一篇博客 ...

随机推荐

  1. sublime text3 3143 注册码

    sublime text3  3143 注册码,可用~ Sublime Text一款具有代码高亮.语法提示.自动完成且反应快速的编辑器软件,不仅具有华丽的界面,还支持插件扩展机制.相比于难于上手的Vi ...

  2. C# 索引器简介

    索引器是一种特殊的类成员,它能够让对象以类似数组的方式来存取,是程序看起来更为直观,更容易编写. 1.索引器的定义 C#中的类成员可以是任意类型,包括数组和集合.当一个类包含了数组和集合成员时,索引器 ...

  3. CCIE-交换路由复习笔记

    交换 考点: 1.trunk link(基础) 2.vtp 3.vlan 4.stp rstp mstp 5.hsrp vrrp glbp 6.ec Trunk link: 修改封装模式 802.1q ...

  4. update:我的Emacs配置文件

    ;;设置字体用的  防止中文变成无法识别的框框 (set-default-font "Consolas-11") (set-fontset-font "fontset-d ...

  5. 201521123113《Java程序设计》第14周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图.Onenote或其他)归纳总结多数据库相关内容. JDBC体系架构: 2. 书面作业 Q1. MySQL数据库基本操作 1.1 建立数据库test ...

  6. Activiti第一篇【介绍、配置开发环境、快速入门】

    Activiti介绍 什么是Activiti? Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理.工作流.服务协作等领域的一个开 ...

  7. Intellij idea使用Junit

    之前使用idea做Junit测试的时候,都是一个一个方法来写,然后在方法名@Test这样测试-.. 后来发现eclipse有直接把整个类的方法都可以抽取出来,自动生成Junit测试方法-于是在找Ide ...

  8. 【SQL】- 基础知识梳理(四) - 存储过程

    存储过程的概念 存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行 存储过程的好处 A. 存储过程允许标准组件式编程  ...

  9. Android性能优化xml之<include>、<merge>、<ViewStub>标签的使用

    一.使用<include>标签对"重复代码"进行复用 <include>标签是我们进行Android开发中经常用到的标签,比如多个界面都同样用到了一个左侧筛 ...

  10. iOS 多人共享开发证书

    当多人开发时,如果已经申请了几个开发者证书和发布者证书,苹果就不允许再创建了,页面添加的地方被灰化了,所以不可能每个人都建一个开发证书,这时候需要共用一个证书了.(其实一般在我们的证书界面中应该只有一 ...