欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos

本篇概览

  • 本篇是《java与es8实战》系列的第二篇,主要任务是为动手实战做好准备工作,包括这些内容
  1. 借助docker,快速部署es服务
  2. 借助docker-compose,以更简单的方式部署es集群和kibana服务
  3. 介绍实战中涉及的环境信息,例如JDK、软件、库的版本
  4. 聊聊java操作es的基本套路
  5. 为整个《java与es8实战》系列创建父工程,后面的实战有关的代码,全部写在这个父工程下面
  • OK,开始

借助docker,快速部署es服务

借助docker-compose,以更简单的方式部署es集群和kibana服务

介绍实战中的环境信息,给您作为参考

  1. 操作系统:macOS Monterey(M1 Pro芯片的MacBook Pro,16G内存)
  2. Docker:Docker Desktop 4.7.1 (77678)
  3. ElasticSearch:8.2.2
  4. Kibana:8.2.2
  5. JDK:openjdk 11.0.14.1
  6. Maven:3.8.5
  7. IDEA: 2022.1.2 (Ultimate Edition)
  8. SpringBoot:2.7.0

聊聊java操作es的基本套路

  • 从es官方的视角来看,提供了三种操作es的方式
  1. Java Transport Client :提供异步操作es的客户端API,自7.0.0版本开始被废弃,所以本系列是用不上了
  2. Java REST Client:这个算是大名鼎鼎了,平常用的也很多,它由Low Level和Hight Level两部分组成,Low Level负责负载均衡、容错、持续连接、底层日志跟踪等基本能力,Hight Level是基于Low Level实现的,提供了原有的Transport Client的客户端能力,提供同步和异步两种操作模式,从7.X版本开始,es官方就给出了迁移指导:推荐用户从Java REST Client迁移到Java API Client
  3. 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

  1. Spring Data模块下属的Spring Data Elasticsearch是推荐的es操作方案
  2. High Level REST Client是Spring Data中默认的底层实现
  3. 尽管Spring Data依然支持Java Transport Client,但推荐使用的是High Level REST Client
  4. 遗憾的是,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实战之二:实战前的准备工作的更多相关文章

  1. [Java聊天室server]实战之二 监听类

    前言 学习不论什么一个稍有难度的技术,要对其有充分理性的分析,之后果断做出决定---->也就是人们常说的"多谋善断":本系列尽管涉及的是socket相关的知识,但学习之前,更 ...

  2. 非阻塞同步算法实战(二)-BoundlessCyclicBarrier

    本人是本文的作者,首发于ifeve(非阻塞同步算法实战(二)-BoundlessCyclicBarrier) 前言 相比上一 篇而言,本文不需要太多的准备知识,但技巧性更强一些.因为分析.设计的过程比 ...

  3. Mybaits-plus实战(二)

    1. Mybaits-plus实战(二) 1.1. mybatis-plus插件 1.1.1. 用法 先举个例子介绍用法,如下:直接作为Bean注入,一般来讲插件太多印象性能,所以大部分插件都只在测试 ...

  4. apollo入门demo实战(二)

    1. apollo入门demo实战(二) 1.1. 下载demo 从下列地址下载官方脚本和官方代码 https://github.com/nobodyiam/apollo-build-scripts ...

  5. Spring Boot 揭秘与实战(二) 数据缓存篇 - EhCache

    文章目录 1. EhCache 集成 2. 源代码 本文,讲解 Spring Boot 如何集成 EhCache,实现缓存. 在阅读「Spring Boot 揭秘与实战(二) 数据缓存篇 - 快速入门 ...

  6. Flink的sink实战之二:kafka

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  7. Kurento实战之二:快速部署和体验

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  8. client-go实战之二:RESTClient

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  9. [原创].NET 分布式架构开发实战之二 草稿设计

    原文:[原创].NET 分布式架构开发实战之二 草稿设计 .NET 分布式架构开发实战之二 草稿设计 前言:本篇之所以称为草稿设计,是因为设计的都是在纸上完成的.反映了一个思考的过程. 本篇的议题如下 ...

  10. Selenium Web 自动化 - 项目实战(二)

    Selenium Web 自动化 - 项目实战(二) 2016-08-08 什么是数据驱动?简答的理解就是测试数据决定了测试结果,这就是所谓数据驱动.数据驱动包含了数据,他就是测试数据,在自动化领域里 ...

随机推荐

  1. 认识CPU底层原理(1)——MOSFET

    本文为B站UP主硬件茶谈制作的系列科普<[硬件科普]带你认识CPU>系列的学习笔记,仅作个人学习记录使用,如有侵权,请联系博主删除 近年来,由于国内外各种因素影响,半导体行业逐渐被推向风口 ...

  2. protoBuf 实现客户端与服务端

    转载请注明出处: 1.定义消息格式 在 src/main/proto 目录下创建 person.proto 文件,并定义消息格式,例如: syntax = "proto3"; pa ...

  3. 「P3」试下1个半月能不能水出个毕设

    前言 虽然说标题上写的时间是1个半月,但是实际上,真正开始行动的时间应该1个月都没有.之前都是在公司上班没活的时候干的.现在请了个长假,专门来做毕业设计:预计5月前能做完整个毕业设计,然后劳动节放假期 ...

  4. .Net8顶级技术:IR边界检查之IR解析(二)

    前言 IR技术应用在各个编程语言当中,它属于JIT的核心部分,确实有点点麻烦.但部分基本明了.本篇通过小例子了解下.前情提要,看这一篇之前建议看看前一篇:点击此处,以便于理解. 概括 1.前奏 先上C ...

  5. Go 开源库运行时依赖注入框架 Dependency injection

    Dependency injection 一个Go编程语言的运行依赖注入库.依赖注入是更广泛的控制反转技术的一种形式.它用于增加程序的模块化并使其具有可扩展性. 实例展示(High API): typ ...

  6. ggplot2 调整绘图区域大小

    熟悉 R 绘图的朋友肯定知道,在普通绘图中,图片的大小可以直接在 png() 和 pdf() 中指定,而绘图区大小则可以用 par() 中的 mar 或 mai 来指定.但是在 ggplot2 中,图 ...

  7. R 数据可视化 : 热图

    本文作者蒋刘一琦,自嘲是一个有艺术追求的生信狗,毕业于浙江大学生物信息学专业,目前在复旦大学就读研究生,研究方向为宏基因组. 在生物信息领域我们常常使用 R 语言对数据可视化.在对数据可视化的时候,我 ...

  8. Android APK 文件结构

    序言 APK(全称:Android application package,Android应用程序包)是Android操作系统使用的一种应用程序包文件格式,用于分发和安装移动应用及中间件. APK 文 ...

  9. 【C#/.NET】record介绍

    ​  目录 什么是record? 使用record record解构 record原理 结论 什么是record? record是.NET 5中的一种新特性,可以看作是一种概念上不可变的类.recor ...

  10. 【python基础】循环语句-break关键字

    1.break关键字 break关键字,其作用是在循环中的代码块遇到此关键字,立刻跳出整个循环,执行循环外的下一条语句. 其在while和for循环中的作用示意图如下: 1.1break在while循 ...