java通过shield链接Elasticsearch
本文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的更多相关文章
- java课程设计之--Elasticsearch篇
一.团队课程设计博客链接 https://www.cnblogs.com/Rasang/p/12169899.html 二.个人负责模块或任务说明 2.1Elasticsearch简介 Elastic ...
- Java生成短链接
为什么要生成短链接 微博之所以要是使用短链接,主要是因为微博只允许发140 字,如果链接地址太长的话,那么发送的字数将大大减少. 那么使用短链接的作用有哪些呢?1.字数,2.统计,3.监控,4.过滤 ...
- Java获取项目当前请求的全部URL,Java获取Referer,Java获取完整链接地址URL
Java获取项目当前请求的全部URL,Java获取Referer,Java获取完整链接地址URL >>>>>>>>>>>>> ...
- java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串
java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串 package com.zdz.test; im ...
- springboot整合elasticsearch出错:java.lang.NoClassDefFoundError: org/elasticsearch/plugins/NetworkPlugin
Caused by: java.lang.NoClassDefFoundError: org/elasticsearch/plugins/NetworkPlugin at java.lang.Clas ...
- Java JDBC 数据库链接小结随笔
Java JDBC 数据库链接小结随笔 一.链接数据库的步骤 二.关于Statement 和 PrepareStatement 两者区别 用法 三.关于 ResultSet 的一些小结 四.自定义 ...
- Java连接简单使用ElasticSearch
目录 1. 添加依赖 2. 代码,无账号密码 3. 代码,有账号密码,并且是https方式 4. 参考文章 1. 添加依赖 <!-- https://mvnrepository.com/arti ...
- java dump 内存分析 elasticsearch Bulk异常引发的Elasticsearch内存泄漏
Bulk异常引发的Elasticsearch内存泄漏 2018年8月24日更新: 今天放出的6.4版修复了这个问题. 前天公司度假部门一个线上ElasticSearch集群发出报警,有Data Nod ...
- java优雅的使用elasticsearch api
本文给出一种优雅的拼装elasticsearch查询的方式,可能会使得使用elasticsearch的方式变得优雅起来,使得代码结构很清晰易读. 建立elasticsearch连接部分请参看另一篇博客 ...
随机推荐
- MSH:一个简单SH工具实现
本文将分为不同的Part,分别实现Shell的一部分功能. msh从CSAPP的SHLAB出发,逐渐完善SHELL功能,并移植到自己的OS上. Github: https://github.com/H ...
- [转载]历上最强的音乐播放器(jetAudio-8.0.5.320-Plus-VX
原文地址:历上最强的音乐播放器(jetAudio-8.0.5.320-Plus-VX-完全汉化版)下载作者:盖世天星 历上最强的音乐播放器(jetAudio-8.0.5.320-Plus-VX-完全汉 ...
- 转:【Java并发编程】之二十二:并发新特性—障碍器CyclicBarrier(含代码)
转载请注明出处:http://blog.csdn.net/ns_code/article/details/17512983 CyclicBarrier(又叫障碍器)同样是Java5中加入的新特性,使用 ...
- 定时任务之crontab命令
1.简介 crontab用于设置周期性被执行的命令 Linux系统中Linux调动工作分为两大类: 1.系统执行的工作:系统周期性所要执行的工作,如备份系统数据.清理缓存 2.个人执行的工作:某个用户 ...
- Python并发编程协程(Coroutine)之Gevent
Gevent官网文档地址:http://www.gevent.org/contents.html 基本概念 我们通常所说的协程Coroutine其实是corporate routine的缩写,直接翻译 ...
- 超级简单实用的前端必备技能-javascript-全屏滚动插件
fullPage.js fullPage.js是一个基于jQuery的全屏滚动插件,它能够很方便.很轻松的制作出全屏网站 本章内容将详细介绍Android事件的具体处理及常见事件. 主要功能 支持 ...
- 201521123084 《Java程序设计》第13周学习总结
1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. answer: (1)netassist可以用来链接IP端口 (2)accept方法可以用来监听端口,当没 ...
- 团队作业8——第二次项目冲刺(Beta阶段)--第二天
团队作业8--第二次项目冲刺(Beta阶段)--第二天 会议照片: 燃尽图: 项目进展: 今天完成了记录用户的姓名,其他的任务还在跟进. 团队贡献比: 队员 角色 团队贡献比 陈麟凤 PM 16% 张 ...
- 英语词典Alpha版本发布说明
Alpha版本发布说明 功能: ·简洁的应用界面,不被无良的广告弹窗影响 ·功能直接,在需要查词时及时出现,没有每日一句精选文章等杀了你的流量,在学习过程中更加专注! ·采用金山词霸API,提供发音 ...
- 201521123103 《Java学习笔记》第二周学习笔记
一.本周学习总结 1.学习了数据类型的使用:整数类型.浮点类型. boolean类型.数组等以及类型的转换,最重要的是学会了import引用包: 2.学习了string类对象的拼接.字符串池.枚举类型 ...