java与es8实战之二:实战前的准备工作
欢迎访问我的GitHub
这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos
本篇概览
- 本篇是《java与es8实战》系列的第二篇,主要任务是为动手实战做好准备工作,包括这些内容
- 借助docker,快速部署es服务
- 借助docker-compose,以更简单的方式部署es集群和kibana服务
- 介绍实战中涉及的环境信息,例如JDK、软件、库的版本
- 聊聊java操作es的基本套路
- 为整个《java与es8实战》系列创建父工程,后面的实战有关的代码,全部写在这个父工程下面
- OK,开始
借助docker,快速部署es服务
- 《java与es8实战》系列的重点是开发,因此不会花太多时间去讲解如何部署和配置es,基本上就是有个能用的es8环境即可
- 推荐您参考《Docker下elasticsearch8部署、扩容、基本操作实战(含kibana)》,这里面详细说明的如何在docker下快速部署es服务,以及一些常见的操作
借助docker-compose,以更简单的方式部署es集群和kibana服务
- 如果您觉得《Docker下elasticsearch8部署、扩容、基本操作实战(含kibana)》的操作过于复杂,想更简单的部署一个es集群,外加kibana开箱即用,可以参考《docker-compose快速部署elasticsearch-8.x集群+kibana》,另外此文还会告诉您如何部署一个无需安全检查(证书、账号密码)的es集群
介绍实战中的环境信息,给您作为参考
- 操作系统:macOS Monterey(M1 Pro芯片的MacBook Pro,16G内存)
- Docker:Docker Desktop 4.7.1 (77678)
- ElasticSearch:8.2.2
- Kibana:8.2.2
- JDK:openjdk 11.0.14.1
- Maven:3.8.5
- IDEA: 2022.1.2 (Ultimate Edition)
- SpringBoot:2.7.0
聊聊java操作es的基本套路
- 从es官方的视角来看,提供了三种操作es的方式
- Java Transport Client :提供异步操作es的客户端API,自7.0.0版本开始被废弃,所以本系列是用不上了
- Java REST Client:这个算是大名鼎鼎了,平常用的也很多,它由Low Level和Hight Level两部分组成,Low Level负责负载均衡、容错、持续连接、底层日志跟踪等基本能力,Hight Level是基于Low Level实现的,提供了原有的Transport Client的客户端能力,提供同步和异步两种操作模式,从7.X版本开始,es官方就给出了迁移指导:推荐用户从Java REST Client迁移到Java API Client
- Java API Client:官方主推方案,依赖Elasticsearch core,对请求和响应都有强类型约束,支持jackson和JSON-b等两种序列化&反序列化方案,所有API都提供了同步和异步两种方式,推荐使用fluent style+lambda模式编码
从以上小结可以看出,在es8.x的环境下,使用Java API Client是首选,不过旧代码以Java REST Client居多,拿来也能在es8环境使用(通过一个api设置,让请求的header中带有兼容信息,es服务器收到此信息会以7.x模式处理请求)
再从spring视角来看如何操作es
- Spring Data模块下属的Spring Data Elasticsearch是推荐的es操作方案
- High Level REST Client是Spring Data中默认的底层实现
- 尽管Spring Data依然支持Java Transport Client,但推荐使用的是High Level REST Client
- 遗憾的是,Spring Data目前还不支持Java API Client,也不支持es的8.x版本,详情如下表,来自官方

- 由于《java与es8实战》系列已将es版本固定为8.2,因此,编码过程中,es操作方案选择es官方的Java API Client,和Spring Data不会有关系了
为整个《java与es8实战》系列创建父工程
整个系列后面的文章,少不了写代码,还是提前建好工程吧,用maven建立一个父工程,后面的代码都放在这个父工程下面,方便jar包版本和代码资源的统一管理
新建名为elasticsearch-tutorials的maven工程,其pom.xml内容如下,可见非常简单,仅仅是对jar做了些管理,再定义了一些常量,今后新增的子工程可以用到,例如SpringBoot版本为2.7.0
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.bolingcavalry</groupId>
<artifactId>elasticsearch-tutorials</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>elasticsearch-tutorials</name>
<properties>
<java.version>11</java.version>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<!-- <maven-compiler-plugin.version>3.6.1</maven-compiler-plugin.version>-->
<springboot.version>2.7.0</springboot.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<elastic.version>8.2.2</elastic.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>co.elastic.clients</groupId>
<artifactId>elasticsearch-java</artifactId>
<version>${elastic.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.3</version>
</dependency>
<!-- Needed only if you use the spring-boot Maven plugin -->
<dependency>
<groupId>jakarta.json</groupId>
<artifactId>jakarta.json-api</artifactId>
<version>2.0.1</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
- 至此,准备工作算是完成了,接下来文章会很轻松,和大家聊聊关于Java API Client的一些重要知识点,毕竟后面写代码全指望它了
欢迎关注博客园:程序员欣宸
java与es8实战之二:实战前的准备工作的更多相关文章
- [Java聊天室server]实战之二 监听类
前言 学习不论什么一个稍有难度的技术,要对其有充分理性的分析,之后果断做出决定---->也就是人们常说的"多谋善断":本系列尽管涉及的是socket相关的知识,但学习之前,更 ...
- 非阻塞同步算法实战(二)-BoundlessCyclicBarrier
本人是本文的作者,首发于ifeve(非阻塞同步算法实战(二)-BoundlessCyclicBarrier) 前言 相比上一 篇而言,本文不需要太多的准备知识,但技巧性更强一些.因为分析.设计的过程比 ...
- Mybaits-plus实战(二)
1. Mybaits-plus实战(二) 1.1. mybatis-plus插件 1.1.1. 用法 先举个例子介绍用法,如下:直接作为Bean注入,一般来讲插件太多印象性能,所以大部分插件都只在测试 ...
- apollo入门demo实战(二)
1. apollo入门demo实战(二) 1.1. 下载demo 从下列地址下载官方脚本和官方代码 https://github.com/nobodyiam/apollo-build-scripts ...
- Spring Boot 揭秘与实战(二) 数据缓存篇 - EhCache
文章目录 1. EhCache 集成 2. 源代码 本文,讲解 Spring Boot 如何集成 EhCache,实现缓存. 在阅读「Spring Boot 揭秘与实战(二) 数据缓存篇 - 快速入门 ...
- Flink的sink实战之二:kafka
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Kurento实战之二:快速部署和体验
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- client-go实战之二:RESTClient
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- [原创].NET 分布式架构开发实战之二 草稿设计
原文:[原创].NET 分布式架构开发实战之二 草稿设计 .NET 分布式架构开发实战之二 草稿设计 前言:本篇之所以称为草稿设计,是因为设计的都是在纸上完成的.反映了一个思考的过程. 本篇的议题如下 ...
- Selenium Web 自动化 - 项目实战(二)
Selenium Web 自动化 - 项目实战(二) 2016-08-08 什么是数据驱动?简答的理解就是测试数据决定了测试结果,这就是所谓数据驱动.数据驱动包含了数据,他就是测试数据,在自动化领域里 ...
随机推荐
- only仅显示一些字段
only仅显示一些字段 仅显示nickname,age两列的数据 Student.objects.all().only('nickname','age')
- IDP 与 DevOps平台:相似之处与关键差异
软件开发是一个复杂而动态的过程,涉及许多工具.技术和实践.为了更快.更好地交付软件,开发人员需要有效地协作,自动执行任务,并管理环境.然而,由于软件架构的日益复杂,工具和平台的多样性,以及对安全和合规 ...
- 在程序里如何停止整个python项目的运行
我们的项目无可避免的会遇到一些场景,当出现某个故障或者异常,必须停止整个项目的运行,这时只需要在抛出的异常里执行以下即可: os._exit(0)
- L3-017 森森快递
一.题目: 7-2 森森快递 (30 分) 森森开了一家快递公司,叫森森快递.因为公司刚刚开张,所以业务路线很简单,可以认为是一条直线上的N个城市,这些城市从左到右依次从0到(N−1)编号.由于道路限 ...
- Java关键字break、continue 、return的区别,嵌套循环,数组的概念以及数组案例
一.关键字 break.continue .return的区别 1.break : 用于在switch..case中放置语句块穿透, 用于跳出循环 // 从1-100 遇到7的倍数 break f ...
- 【python基础】复杂数据类型-列表类型(排序/长度/遍历)
1.列表数据元素排序 在创建的列表中,数据元素的排列顺序常常是无法预测的.这虽然在大多数情况下都是不可避免的,但经常需要以特定的顺序呈现信息.有时候希望保留列表数据元素最初的排列顺序,而有时候又需要调 ...
- Galaxy Project 是一个由 NIH、NSF、Johns Hopkins University 等机构支持的开源生物医学开源项目。Galaxy 作为其中的一个子项目,提供了以英文为主,......
本文分享自微信公众号 - 生信科技爱好者(bioitee).如有侵权,请联系 support@oschina.cn 删除.本文参与"OSC源创计划",欢迎正在阅读的你也加入,一起分 ...
- 大家都说Java有三种创建线程的方式!并发编程中的惊天骗局!
在Java中,创建线程是一项非常重要的任务.线程是一种轻量级的子进程,可以并行执行,使得程序的执行效率得到提高.Java提供了多种方式来创建线程,但许多人都认为Java有三种创建线程的方式,它们分别是 ...
- JUC同步锁原理源码解析四----Semaphore
JUC同步锁原理源码解析四----Semaphore Semaphore 1.Semaphore的来源 A counting semaphore. Conceptually, a semaphore ...
- 3. HelloWorld的实现
恐惧是本能,行动是信仰(在此感谢尚硅谷宋红康老师的教程) 1. 新建 Project - Class 选择"New Project": 指名工程名.使用的 JDK 版本等信息.如下 ...