本文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. 团队作业8——第二次项目冲刺(Beta阶段)5.27

    1.当天站立式会议照片 会议内容: 本次会议为第七次会议 本次会议在陆大楼2楼召开,本次会议内容: ①:检查总结上次任务完成情况 ②:安排今天的分工 ③:对昨天的问题进行讨论 2. 每个人的工作 (有 ...

  2. 团队作业4——第一次项目冲刺(Alpha版本)第六天and第七天

    团队作业4--第一次项目冲刺(Alpha版本)第六天and第七天 第一次项目冲刺(Alpha版本)第六天 一.Daily Scrum Meeting照片   二.燃尽图 1.解释说明横纵坐标代表的含义 ...

  3. 团队作业4——第一次项目冲刺(Alpha版本) Day1

    1.开站立式会议: 2.Leangoo任务分解图: 3.开会讨论的结果,任务分派 队员 今日进展 明日安排 林燕 调查产品的市场需求,学习微信开发 完善逻辑架构框架 王李焕 结合实际分析系统设计思路, ...

  4. 201521123067 《Java程序设计》第9周学习总结

    201521123067 <Java程序设计>第9周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 Q1.常用异常(题目5-1 ...

  5. 201521123118《java程序与设计》第9周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 1. 常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出 ...

  6. 201521123089 《Java程序设计》第9周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 常用异常 题目5-11.1 截图你的提交结果(出现学号) 1.2 自己以前编 ...

  7. DAU新解

    写在回归之时 --------------------------- 抱歉,已经超过三年没有回到这里了. 浮躁,虚荣,一颗心没有落到地上,也没有好好总结一下自己.怀念最开始那个时候的状态,安静的做点事 ...

  8. linux 下怎样查找一个文件夹在哪个目录下?

    如果只显示所在目录的路径: find 目录 -type d -name "查询目录名" -printf "%h\n" 如果同时显示目录名称和所在目录的路径: f ...

  9. jQuery常用语法总结笔记

    jQuery 1.入口函数 1          $(document).ready(function(){}); 2          $(function(){}); jQuery入口函数与js入 ...

  10. 警惕Java编译器中那些“蜜糖”陷阱

    一.前言 随着Java编译器不断地向前发展,它为程序员们提供了越来越多的“蜜糖”(compiler suger),极大地方便了程序的开发,例如,foreach的增强模式,自动拆箱与装箱以及字符串的连接 ...