Debezium发布历史122

原文地址: https://debezium.io/blog/2022/05/04/switch-to-java-11/

欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯.

Switching to Java 11/17
May 4, 2022 by Vojtěch Juránek
community news

你可能已经注意到了,我们已经开始研究德贝兹2.0了。其中的 计划的变化 对于2.0版本来说 转换到Java11作为基线 .虽然一些Java构建提供者仍然支持Java8,但其他Java8分布已经达到了生命/支持的极限。不管怎样,用户正转向java11,像新文物的调查一样。 爪哇生态系统状况报告 显示。但这不仅仅是支持的问题:Java11带来了各种性能改进,像JDK飞行记录器这样的有用工具,它是在Java11开放的,等等。因此,我们觉得现在是时候开始考虑使用最近的JDK作为Debezu的基线了,而新的主要版本是进行转换的自然里程碑。

从第一版的德贝唑2.0开始, 2.0.0.Alpha1 ,德贝兹比特将被编译成java11字节代码。因此,在下一次主要更新中,将需要Java11来运行Debezns。另外,如果您在您的项目中使用任何一个德贝兹位作为库(使用德贝兹位) 嵌入式发动机 ),你将不得不改用java11。

但是等等,在标题中java11/17是什么意思?这是为了吓你,还是我们要马上转向java17?

戏剧性的停顿

不,我们不想吓到你。实际上,我们正计划转换到Java17,但仅限于测试套件。请注意java11和17都是长期支持版本。我们还不希望将Java17移动到实际的德贝兹工件上,因为这可能是大量德贝兹用户的问题;例如。上述新的文物报告显示,大多数用户仍然在java11上,当然,我们不想排除他们。然而,在测试中使用Java17不会以任何方式影响用户,并且将允许我们在测试中使用一些最近的Java特性,例如。* 文本块 例如,它简化了多行JSON或SQL字符串的使用,* 记录 ,可提高测试中大量使用的流操作的可读性,* 开关表达式 ,还有更多。

很甜蜜,对吧?

实施
为代码和测试设置不同的字节代码级别非常容易,只需要设置以下属性:

<maven.compiler.release>11</maven.compiler.release>
<maven.compiler.testRelease>17</maven.compiler.testRelease>
请注意我们使用的是release 备选办法而不是遗产source 和target 选项,可以防止目标Java版本中不存在的JavaAPI的意外使用。见例如。贡纳的博客帖子 拜特缓冲器和可怕的情报工作者 更多的细节。

转换到java11后 Maven检查风格的插件 以及 不合理的插件 (一个负责处理适当导入订单的插件)开始失败。然而,将他们的版本推到最新版本已经解决了所有的问题。

这是最简单的部分。最困难的是德贝司 阿帕奇卡珊德拉连接器 .

卡珊德拉连接器测试
此后 版本1.9 卡珊德拉连接器为卡珊德拉3号和卡珊德拉4号提供支持。卡珊德拉4号 很有魅力 但是用java11运行卡珊德拉3是不可能的(或者至少需要一些黑客攻击)。这个连接器的现有测试实现没有像我们在所有其他db连接器的测试中那样在容器中运行卡珊德拉,而是在嵌入式模式下运行卡珊德拉。与测试本身相同的JVM和进程。因此,如果您想用Java11(或17)运行这些测试,卡珊德拉3号连接器模块的测试就会失败。

显而易见的解决方案是用java8在容器中运行卡珊德拉。这听起来不错,但这种方法有一个陷阱。卡珊德拉连接器需要访问卡珊德拉日志文件,因为它从卡珊德拉日志文件中获取了c…使用临时目录可以很容易地解决这个问题,例如在target 把它装进卡珊德拉的容器里。在容器中运行的卡珊德拉可以在稍后使用这个安装的卷存储其数据。

真正的问题从测试结束后进行清理时开始。卡珊德拉在一个名为cassandra 这很可能在测试机器上不存在(或者使用不同的UID/GID),当它试图用卡珊德拉文件删除临时目录时,清理失败。这些文件是在安装在容器中的时序目录中创建的,而不是在码头工的叠加中创建的,因此这些文件存在于target 目录。因为这些文件是由cassandra 用户与运行测试的用户很可能是不同的用户,运行测试的用户没有足够的权利删除所创建的文件。cassandra 用户。试图在卡珊德拉出口的卡珊德拉容器中删除它们的一些包装脚本被证明是非常繁琐和不太可靠的。

最有希望的解决方案是启动第二个相同容器cassandra 在第一个卡珊德拉容器停止后,用户可以访问安装的卷并清理文件。

我们考虑了运行集装箱的两种选择:

建筑8码头工人马文插件

试验容器

我们在项目的其他部分使用了FABRR8插件,这意味着在本例中也使用它来实现整个项目的一致性。另一方面,使用测试容器将使测试对开发人员更加方便(毕竟他们实际上使用测试!),因为它允许直接从IDE中运行测试,而无需手动启动容器。

最后,这个决定是由这样一个事实驱动的,即运行一个清除容器是不可能的,以法布里8插件。马文不允许在同一阶段执行不同的配置,因此不可能停止卡珊德拉容器在post-integration-test 在此阶段同时运行清理容器。测试容器允许在需要时以编程方式启动和停止容器,让我们直接在测试代码中定义图像,这样我们就不需要额外的Dockerfile 并且清理容器只是隐藏在测试本身中的一个实现细节。在这些事情的基础上,有能力直接从IDE运行测试,而不必手动启动和停止使用数据库的容器。

当使用测试容器时,唯一棘手的事情是,当我们试图使用Dkerker的cmd 命令,测试容器随机失败,声明容器没有启动,尽管事实上所有的卡珊德拉文件实际上被删除。容器可能跑得太快,在测试容器注意到它之前就完成了。最后,我们通过增加一个简短的sleep 在容器中执行一个额外的命令,在容器中进行清理.

使用测试容器的最终清理代码如下:

@AfterClass
public static void tearDownClass() throws IOException, InterruptedException {
destroyTestKeyspace();
cassandra.stop();

GenericContainer cleanup = new GenericContainer(new ImageFromDockerfile().withDockerfileFromBuilder(builder -> builder.from("eclipse-temurin:8-jre-focal").volume("/var/lib/cassandra").cmd("sleep", "10") // Give TC some time to find out container is running..build())).withFileSystemBind(cassandraDir, CASSANDRA_SERVER_DIR, BindMode.READ_WRITE);
cleanup.start();
cleanup.execInContainer("rm", "-rf",CASSANDRA_SERVER_DIR + "/data",CASSANDRA_SERVER_DIR + "/cdc_raw_directory",CASSANDRA_SERVER_DIR + "/commitlog",CASSANDRA_SERVER_DIR + "/hints",CASSANDRA_SERVER_DIR + "/saved_caches");
cleanup.stop();

}
一旦我们用卡珊德拉测试解决了这个问题,我们基本上就完成了,并准备在测试中使用java11(主Debezum代码)和java17。

未决问题
我们需要更多的战斗测试,以确保所有的工作与Java11/17良好。您对测试和错误报告的帮助在这里非常有价值,非常受欢迎。目前我们知道一个与Java更新相关的未解决的小问题。一些IDE无法区分maven.compiler.release 和maven.compiler.testRelease (或者我们不太清楚如何建立它)。例如这个测试使用了 文本块 会标记为一个错误:
图片来自官网原文
在这里插入图片描述

测试使用文本块在智能j思想。

您可以手动地将Java级别设置为17级,但是在这种情况下,您可能会无意中使用非测试代码中的Java&ttt;11特性,而不需要由IDI让您知道(当然,这并不是一个太多的问题,作为下一个Maven构建,例如。会抓住这个问题)。此外,例如在任何更改的代码级别上,"想法"将重置代码级别。pom.xml 文件。你解决了这个问题吗?您是否使用了一个不存在混合不同Java级别问题的IDI?请在讨论中分享你的经验!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2778912.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

初步探索Pyglet库:打造轻量级多媒体与游戏开发利器

目录 pyglet库 功能特点 安装和导入 安装 导入 基本代码框架 导入模块 创建窗口 创建控件 定义事件 运行应用 程序界面 运行结果 完整代码 标签控件 常用事件 窗口事件 鼠标事件 键盘事件 文本事件 其它场景 网页标签 音乐播放 图片显示 祝大家新…

【vscode】在vscode中如何导入自定义包

只需要额外添加这两条语句即可&#xff1a; import os,sys sys.path.append("../..") 需要注意的是&#xff0c;ipynb 文件打开的工作目录是文件本身的路径&#xff0c;而 py 文件打开的工作路径是 vscode 打开的路径。 相比较而言 pycharm 中创建好项目之后并不…

ubuntu20.04 安装mysql(8.x)

安装mysql命令 sudo apt-get install mysql-server安装完毕后&#xff0c;立即初始化密码 sudo mysql -u root # 初次进入终端无需密码ALTER USER rootlocalhost IDENTIFIED WITH caching_sha2_password BY yourpasswd; # 设置本地root密码设置mysql远程登录 设置远程登录账…

【开源】基于JAVA+Vue+SpringBoot的班级考勤管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统基础支持模块2.2 班级学生教师支持模块2.3 考勤签到管理2.4 学生请假管理 三、系统设计3.1 功能设计3.1.1 系统基础支持模块3.1.2 班级学生教师档案模块3.1.3 考勤签到管理模块3.1.4 学生请假管理模块 3.2 数据库设…

C++进阶——C++11(右值引用)

一、右值 VS 左值 官方定义是&#xff0c;可以直接取得到地址的对象就是左值&#xff0c;而不能取地址的对象就是右值。但按我的理解来说&#xff0c;如果这个对象是有名字&#xff08;变量名&#xff09;的&#xff0c;那就是左值&#xff1b;而除常量数组之外&#xff0c;如…

第206篇| 新年有趣的产品发现;所谓正确的价值观

这是2024年一月份flomo和notion 上聚合的系列文章之&#xff08;02&#xff09;&#xff1b; 具体方法用的是这个 &#xff1a; 【知识沙虫&#xff0c;一个简单易用的知识体系建模工具】https://mp.weixin.qq.com/s/V2Cdq-1PbMQYvpE4o9NLpQ 首先&#xff0c;方法用下来还是很…

人工智能能产生情绪吗?

此图片来源于网络 一、人情绪的本质是什么&#xff1f; 人的情绪本质是一个复杂的现象&#xff0c;涉及到生理、心理和社会的多个层面。以下是关于情绪本质的几种观点&#xff1a; 情绪的本质是生命能量的表达。情绪被认为是生命能量的一种体现&#xff0c;通过情绪的体验和…

【踏雪无痕的痕二】——小学一年级数学题窥探蝴蝶效应

目录 一、背景介绍二、思路&方案三、过程1.结果一致过程不一致带来的偏差2.再举两个例子&#xff0c;你品一品3.我曾经的培养计划背后的"力量"&#xff1f;4.蝴蝶效应——混沌或非线性理论什么是蝴蝶效应&#xff1f; 5.内心深处的小恶魔(人性的使然) 四、总结 一…

春节假期:思考新一年的发展思路

春节假期是人们放松身心、享受家庭团聚的时刻&#xff0c;但除了走亲戚、玩、吃之外&#xff0c;我们确实也需要思考新的一年的发展思路。以下是一些建议&#xff0c;帮助您在春节假期中为新的一年做好准备&#xff1a; 回顾过去&#xff0c;总结经验&#xff1a;在春节期间&a…

react中hook封装一个table组件 与 useColumns组件

目录 1&#xff1a;react中hook封装一个table组件依赖CommonTable / index.tsx使用组件效果 2&#xff1a;useColumns组件useColumns.tsx使用 1&#xff1a;react中hook封装一个table组件 依赖 cnpm i react-resizable --save cnpm i ahooks cnpm i --save-dev types/react-r…

系统架构24 - 软件架构设计(3)

软件架构风格&#xff08;上&#xff09; 概述架构风格数据流架构风格批处理风格管道-过滤风格 调用/返回架构风格主程序/子程序风格面向对象风格层次结构风格客户端/服务器风格 以数据为中心的架构风格仓库风格黑板风格 虚拟机架构风格解释器风格规则系统风格 独立构件架构风格…

React - 分页插件默认是英文怎么办

英文组件的通用解决方案 这里以分页插件为例&#xff1a; 大家可以看到&#xff0c;最后的这个页面跳转提示文字为Go to&#xff0c;不是中文&#xff0c;而官网里面的案例则是&#xff1a; 解决方案&#xff1a; import { ConfigProvider } from antd; import zhCN from an…

ShardingSphere 5.x 系列【7】元数据持久化

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列ShardingSphere 版本 5.4.0 源码地址:https://gitee.com/pearl-organization/study-sharding-sphere-demo 文章目录 概述2. 单机模式2.1 H22.2 MySQL3. 集群模式3.1 ZooKeeper3.2 Nacos3.3 Cons…

【大厂AI课学习笔记】【1.5 AI技术领域】(10)对话系统

对话系统&#xff0c;Dialogue System&#xff0c;也称为会话代理。是一种模拟人类与人交谈的计算机系统&#xff0c;旨在可以与人类形成连贯通顺的对话&#xff0c;通信方式主要有语音/文本/图片&#xff0c;当然也可以手势/触觉等其他方式 一般我们将对话系统&#xff0c;分…

AES加密中的CBC和ECB

目录 1.说明 2.ECB模式&#xff08;base64&#xff09; 3.CBC模式 4.总结 1.说明 AES是常见的对称加密算法&#xff0c;加密和解密使用相同的密钥&#xff0c;流程如下&#xff1a; 主要概念如下&#xff1a; ①明文 ②密钥 用来加密明文的密码&#xff0c;在对称加密算…

C语言字符常量与字符变量..

1.字符常量 诸如’a’、‘b’、c’这类的都归属于字符常量 而且我们都知道printf()函数接收的第一个参数是字符串 所以不能够直接将字符常量作为printf函数的第一个参数 并且字符常量对应的占位符为%c 以下是对字符常量的演示 int main(){printf("%c%c%c%c", a, b…

第一篇【传奇开心果微博文系列】Python微项目技术点案例示例:pillow库实现毛笔字春联

传奇开心果微博文系列 系列微博文目录Python微项目技术点案例示例系列 微博文目录一、微项目目标二、实现微项目编程思路三、初步实现目标示例代码四、添加背景色、边框、阴影效果示例代码五、添加花纹背景、装饰线条示例代码六、添加花朵、插图等示例代码 系列微博文目录 Pyt…

Go语言每日一练——链表篇(八)

传送门 牛客面试笔试必刷101题 ----------------两个链表的第一个公共结点 题目以及解析 题目 解题代码及解析 解析 这一道题使用的还是双指针算法&#xff0c;我们先求出两个链表的长度差n&#xff0c;然后定义快慢指针&#xff0c;让快指针先走n步&#xff0c;最后快慢指…

【Linux】学习-进程信号

进程信号 信号入门 生活角度的信号 你在网上买了很多件商品,再等待不同商品快递的到来。但即便快递没有到来,你也知道快递来临时,你该怎么处理快递。也就是你能“识别快递”,也就是你意识里是知道如果这时候快递员送来了你的包裹,你知道该如何处理这些包裹当快递员到了你…

Javaweb之SpringBootWeb案例之事务管理的详细解析

1. 事务管理 1.1 事务回顾 在数据库阶段我们已学习过事务了&#xff0c;我们讲到&#xff1a; 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位。事务会把所有的操作作为一个整体&#xff0c;一起向数据库提交或者是撤销操作请求。所以这组操作要么同时成功&am…