Debezium发布历史122

news2024/11/16 18:37:53

原文地址: 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://www.coloradmin.cn/o/1443895.html

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

相关文章

腾讯云4核8G服务器性能如何?支持多少用户访问?

腾讯云4核8G服务器支持多少人在线访问&#xff1f;支持25人同时访问。实际上程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&#xff0c;假设公网带宽太小&#xff0c;流量直接卡在入口&#xff0c;4核8G配置的CPU内存也会造成计算…

VSTO打包Word插件WPS也支持

启动AdvancedInstallerPortable.exe打包软件 选择“加载项” 选择“office加载项”之后点“创建项目” 四、输入自已的插件名和公司名 任选一种包类型 五、选择包的保存位置 勾选“vsto office加载项” 六、选择要打包的项目debug文件夹 选择相应版本 配置相应环境 选择语言 添…

Linux基础-配置网络

Linux配置网络的方式 1.图形界面 右上角-wired-配置 点加号-新建网络配置文件2.NetworkManager工具 2.1用图形终端nmtui 1.新建网络配置文件add 1.指定网络设备的类型Ethernet 2.配置网络配置文件的名称&#xff0c;名称可以有空格 3.配置网络配置文件对应的物理网络设备的…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Blank组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Blank组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Blank组件 空白填充组件&#xff0c;在容器主轴方向上&#xff0c;空白填充组件具…

sklearn中一些简单机器学习算法的使用

目录 前言 KNN算法 决策树算法 朴素贝叶斯算法 岭回归算法 线性优化算法 前言 本篇文章会介绍一些sklearn库中简单的机器学习算法如何使用&#xff0c;一些注释已经写在代码中&#xff0c;帮助一些小伙伴入门sklearn库的使用。 注意&#xff1a;本篇文章只涉及到如何使用…

Openwifi 开源项目解读(一)

Openwifi 是一个关于wifi 系统的开源项目&#xff0c;是一个少有的优秀的关于wifi的开源项目&#xff0c;项目中包括了wifi的基带、lowmac、linux驱动 等三部分&#xff0c;其中基带、lowmac部分是在FPGA中实现&#xff0c;wifi驱动部分是运行在Linux下&#xff0c;因此openwif…

失去中国市场的三星仍是全球第一,但中国手机无法失去海外市场

随着2023年分析机构公布全球手机市场和中国手机市场的数据&#xff0c;业界终于看清中国市场早已没有以前那么重要&#xff0c;三星、苹果这些国际品牌对中国市场的依赖没有他们想象的那么严重&#xff0c;相反中国手机对海外市场比以往任何时候都要更依赖了。 三星在2023年被苹…

【matalab】基于Octave的信号处理与滤波分析案例

一、基于Octave的信号处理与滤波分析案例 GNU Octave是一款开源软件&#xff0c;类似于MATLAB&#xff0c;广泛用于数值计算和信号处理。 一个简单的信号处理与滤波分析案例&#xff0c;说明如何在Octave中生成一个有噪声的信号&#xff0c;并设计一个滤波器来去除噪声。 首…

【数学建模】【2024年】【第40届】【MCM/ICM】【C题 网球运动中的“动量”】【解题思路】

一、题目 &#xff08;一&#xff09; 赛题原文 2024 MCM Problem C: Momentum in Tennis In the 2023 Wimbledon Gentlemen’s final, 20-year-old Spanish rising star Carlos Alcaraz defeated 36-year-old Novak Djokovic. The loss was Djokovic’s first at Wimbledon…

react函数组件中使用context

效果 1.在父组件中创建一个createcontext并将他导出 import React, { createContext } from react import Bpp from ./Bpp import Cpp from ./Cpp export let MyContext createContext(我是组件B) export let Ccontext createContext(我是组件C)export default function App…

Linux操作系统基础(五):Linux的目录结构

文章目录 Linux的目录结构 一、Linux目录与Windows目录区别 二、常见目录介绍&#xff08;记住重点&#xff09; Linux的目录结构 一、Linux目录与Windows目录区别 Linux的目录结构是一个树型结构 Windows 系统 可以拥有多个盘符, 如 C盘、D盘、E盘 Linux 没有盘符 这个概…

网站建设详细步骤和流程是什么

我们选择了白嫖雨云的二级域名 浏览器输入https://www.rainyun.com/z22_ 创建账号然后选择一个你喜欢的子域名我建议后缀选择ates.top的 选择自定义地址&#xff0c;类型选择cname 现在要选择记录值了&#xff0c;有a&#xff0c;aa&#xff0c;txt等 根据实际情况填写。就可以…

JAVA反射总结学习

初始反射反射的基本操作反射安全性问题 反射是指在Java运行状态中: 给定一个类对象(Class对象)&#xff0c;通过反射获取这个类对象(Class对象)的所有成员结构&#xff1b; 给定一个具体的对象&#xff0c;能够动态地调用它的方法及对任意属性值进行获取和赋值&#xff1b; …

【PyQt】10 QLineEdit

文章目录 前言一、回显模式&#xff08;EchoMode&#xff09;1.1 四种回显模式1.2 代码展示运行结果 二、校验器2.1 代码2.2 运行结果 三、通过掩码限制输入3.1 代码3.2 运行结果 总结 前言 1、QLineEdit 可以输入单行文字 2、回显模式 3、校验器 4、掩码输入 一、回显模式&am…

【Linux】学习-进程信号

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

对话模型Demo解读(使用代码解读原理)

文章目录 前言一、数据加工二、模型搭建三、模型训练1、构建模型2、优化器与损失函数定义3、模型训练 四、模型推理五、所有Demo源码 前言 对话模型是一种人工智能技术&#xff0c;旨在使计算机能够像人类一样进行对话和交流。这种模型通常基于深度学习和自然语言处理技术&…

MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(1)-后端项目框架搭建

前言&#xff1a; 前面的四个章节我们主要讲解了MongoDB的相关基础知识&#xff0c;接下来我们就开始进入使用.NET7操作MongoDB开发一个ToDoList系统实战教程。本章节主要介绍的是如何快熟搭建一个简单明了的后端项目框架。 MongoDB从入门到实战的相关教程 MongoDB从入门到实战…

从信息隐藏到功能隐藏

本文主要记录复旦大学张新鹏教授于2022年12月在第三届CSIG中国媒体取证与安全大会上的汇报

蓝桥杯Web应用开发-CSS3 新特性【练习一:属性有效性验证】

练习一&#xff1a;属性有效性验证 页面上有一个邮箱输入框&#xff0c;当你的输入满足邮箱格式时&#xff0c;输入框的背景颜色为绿色&#xff1b;当你的输入不满足要求&#xff0c;背景颜色为红色。 新建一个 index2.html 文件&#xff0c;在其中写入以下内容。 <!DOCTYP…

Stata实证命令代码汇总

Stata代码命令汇总 数据内容&#xff1a;包括数据导入和管理、数据的处理、描述性统计、相关性分析、实证模型、内生性解决、检验分析、结果导出 具体如下&#xff1a; 一、数据导入和管理&#xff1a;数据导入、数据导出 二、数据的处理&#xff1a;生成新变量、格式转换、…