本文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. 201521123012 《Java程序设计》第五周学习总结

    ##1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 答: 1.2 可选:使用常规方法总结其他上课内容. 答:匿名内部类:将一个类的定义放在另一个类的内部.一般是 **new ...

  2. 201521123008《Java程序设计》第四周学习总结

    1.本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 1.包的命名规范 2.面向对象设计:名词/动词 3.类的设计技巧:一定将属性设计为私有priv ...

  3. 201521123044 《Java程序设计》第9周学习总结

    1. 本章学习总结 2. 书面作业 本次PTA作业题集异常 1.常用异常题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现什么异常.需要捕获吗(为什么)?应如何避免 ...

  4. 201521123055 《Java程序设计》第13周学习总结

    1. 本章学习总结 2. 书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu.edu.cn,分析返回结果有何不同?为什么会有这样的不同? 1.2 te ...

  5. 201521123042 《Java程序设计》 第10周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 上周总结了异常,这周主要总结多线程. 2. 书面作业 本次PTA作业题集异常.多线程 1.finally 题 ...

  6. 201521123067 《Java程序设计》第13周学习总结

    201521123067 <Java程序设计>第13周学习总结 1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 Q1. 网络基 ...

  7. WEB前端面试真题 - 2000!大数的阶乘如何计算?

    HTML5学堂-码匠:求某个数字的阶乘,很难吗?看上去这道题异常简单,却不曾想里面暗藏杀机,让不少前端面试的英雄好汉折戟沉沙. 面试真题题目 如何求"大数"的阶乘(如1000的阶乘 ...

  8. 一个非常好用的框架-AngularJS(一)

      前  言           AngularJS诞生于2009年,由Misko Hevery 等人创建,后为Google所收购.是一款优秀的前端JS框架,已经被用于Google的多款产品当中.An ...

  9. PuTsangTo-单撸游戏开发02 测试场景与单轴移动

    且不说立项与设计阶段的工作量,一个完整的游戏在开发阶段设计的职责范围也是很广,还有个大问题就是PuTsangTo项目也是本人在边学边做,截止目前还是满满的无从下手的感觉,一方面是技能与经验不足,另一方 ...

  10. oracle sql*plus常用命令

    一.sys用户和system用户Oracle安装会自动的生成sys用户和system用户(1).sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限,该用户 ...