PyCharm激活2022.1(PyCharm 2022.1.3 发布)

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

PyCharm激活2022.1(PyCharm 2022.1.3 发布)关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

PyCharm激活2022.1(PyCharm 2022.1.3 发布)关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

历经 8 年的开发,QBE 1.0 已正式发布

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

QBE 是一个纯 C 实现的嵌入式编译器后端,作者将 QBE 与 LLVM 对比,强调 QBE 的优势是简单高效,声称以 LLVM 的 10% 代码量达到其 70% 的性能水平。

主要特性

  • 完全支持 C ABI
  • 支持 IEEE 32 位和 64 位浮点数
  • 使用统一且简单的基于 SSA 的中间语言 (IL)
  • 在所有编译阶段使用相同的 IL
  • Copy elimination
  • 编译速度快(在的 Core 2 Duo 上为 2 秒)
  • ……

QBE 目前已经在下列平台上编译和并通过测试:

  • Linux
  • FreeBSD
  • Mac OS X

编译 QBE 需要 GNU Make 和一个 C99 编译器。而 HTML 文档则使用一个 OCaml 程序根据正则文本文件来生成。

PyCharm激活2022.1(PyCharm 2022.1.3 发布)关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

digiKam 是 KDE 桌面环境的影像管理和编辑程序,支持所有主要图像格式,并可以组织目录为基础的照片收藏,或按日期、时间、或标签的动态相册。用户还可以对图像添加标题和注释,搜索他们和透过智能文件夹保存搜索。添加插件还可以输出到 Flickr 的相册、Gallery2、谷歌地球的 KML 文件、Simpleviewer、刻录成光盘或创建 Web 画廊。

近日,digiKam 7.7 正式发布,本次更新的部分内容如下:

新功能

  • 常规:从核心中移除内部的 libheif 和 libde265,以利于系统库的使用
  • 常规:更新内部 Libraw snashot 至 2022-06-17,支持 Olympus OM-1
  • 在所有捆绑包(AppImage、macOS 和 Windows)中添加 JpegXL 支持(读/写)
  • 在所有捆绑包(AppImage、macOS 和 Windows)中添加 AVIF/AOM 支持(读/写)
  • 所有捆绑包使用 KF5 框架 5.95 版本
  • macOS 软件包使用 Qt 框架 5.15.3 版本

错误修复

  • 当编辑一个组的标题时,digiKam 不会警告可能的信息丢失
  • 撤销/恢复后保存动作的禁用状态不一致
  • 空的相册显示数据库查询没有返回结果的通知信息
  • 对话框中的信息不正确
  • 修复了无法启动 digiKam 的问题
  • 当在 DNG 文件中改变图像方向为纵向时,该改变似乎没有被写入文件数据中
  • 修复 digiKam 启动时挂起的问题
  • digiKam 在 *.svg 文件中含有系统未安装的字体时崩溃
  • 修复 digiKam 导入照片后崩溃
  • 修复 digiKam 在升级到 Ubuntu 22.04 后无法工作的问题

更多详情可查看:https://invent.kde.org/graphics/digikam/-/blob/master/project/NEWS.7.7.0

PyCharm激活2022.1(PyCharm 2022.1.3 发布)关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

go-charts 允许快速生成SVG或PNG格式的图表,生成速度在20ms以下,适用于各类以图片的形式插入至邮件等内容的展示。 v2.0版本简化图表函数调用,并兼容大部分`echarts`的参数形式,可以简单的方式直接根据`echarts`数据生成对应的图表。新版本新增特性如下:

  1. 简化各图表调用参数,大部分参数均提供默认值,减少非必要代码
  2. 增加支持横向柱状图,现已支持6种常用图表,5种常用配色方案。
  3. 增加支持表格类型,根据内容自适应生成对应的表格图片,便于表格类的数据展示

横向柱状图效果:

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

 

表格效果:

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

具体的使用方法以及参考示例可查看项目说明,地址如下:https://github.com/vicanso/go-charts

feilong 3.1.0 发布了,feilong 是一个让Java开发更简便的工具库。

  1. 让你从大量重复的底层代码中脱身,提高开发效率;
  2. 让你的代码,、、;

文档地址: http://feilong-core.mydoc.io/

 增加至  个,  增加至  , 比率 

本次升级共有  处变更, 具体参见 3.1.0 milestone

🐛 bug

#310 http client 中的post ,put 方法 要支持 body 和paramMap 并存的情况 [feilong-net]

👽 不兼容

#329 com.feilong.net.wxwork.bot 包名修改成 com.feilong.net.bot.wxwork (如果你用的是 feilong xml 标签形式, 不会受到影响) [feilong-net-bot]
#314 抽象类 AbstractSecretKeySpecBuilder 的 buildKeyBytes方法 新增algorithm参数 [feilong-security]

🍑 feilong-core

#350  Objectutil 新增 equalsAny 方法 [enhancement]
#353 新建 DefaultIfNullParameterizedTest

🍷 feilong-net

#308  ResponseUtil.write 优化代码, 将 PrintWriter 放在try-with-resources里 [enhancement]

feilong-net-bot

#319 新建 基于钉钉的机器人

🔒 feilong-security

#313  新建 KeyGeneratorKeyBuilder [enhancement]

🍼 feilong-servlet

#352  ResponseUtil writeText writeJson 当characterEncoding 参数是null或者empty的时候, 使用默认的utf-8 [enhancement javadoc]
#351  ResponseUtil.writeJson 注释把 默认utf-8 加上 [enhancement javadoc]
#354  新增 RequestUtil.isNotWechatRequest(HttpServletRequest) [enhancement]
#349  新增 判断请求是来自于微信小程序的方法 [enhancement]

⬆️ 依赖升级

#302 httpclient 升级到 4.5.13
#345 jacoco-maven-plugin 升级到 0.8.8
#316 junit 升级到 4.13.2 [parent]
#315 logback 升级到1.2.11 [parent]
#330 maven-antrun-plugin 升级到 3.1.0
#341 maven-compiler-plugin 升级到3.10.1
#338 maven-dependency-plugin 升级到 3.3.0
#342 maven-jar-plugin 升级到 3.2.2
#339 maven-javadoc-plugin 升级到3.4.0
#340 maven-plugin-plugin 升级到 3.6.4
#343 maven-project-info-reports-plugin 升级到 3.3.0
#305 maven-resources-plugin 插件升级到 3.2.0
#346 maven-scm-plugin 升级到 1.12.2
#334 maven-war-plugin 升级到 3.3.2
#347 org.springframework test 依赖升级到 5.2.22.RELEASE
#317 slf4j 升级到 1.7.32 [parent]
#303 spring optional 依赖升级到 5.2.11.RELEASE
#344 versions-maven-plugin 升级到 2.11.0

 依赖调整

#335 🔥 parent 移除 tiles 默认依赖 [删除]

其他

#328 CollectionsUtil.removeDuplicate(Collection, String) 方法注释不够具体生动 [javadoc]
#355 日期转字符串, 格式 E 在不同jdk 版本显示结果不一样 [javadoc]

PyCharm激活2022.1(PyCharm 2022.1.3 发布)关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

PyCharm激活2022.1(PyCharm 2022.1.3 发布)关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

FreeFileSync 是一款开源软件,适用于 Windows、macOS 和 Linux。FreeFileSync 本质是一个用于文件夹对比和同步的软件,它可以创建和管理所有重要文件的备份副本。FreeFileSync 不是每次都复制每个文件,而是确定源文件夹和目标文件夹之间的差异,并只传输所需的最低数据量。

FreeFileSync 11.22 更新内容如下:

  • 允许更改全局设置中的默认日志文件夹
  • 修复了项目仅存在于一侧时的排序顺序
  • 考虑主路径的 HOME 环境变量(Linux)
  • 修复了使用 shift 和方向键的配置选择
  • 开始比较,然后启动后按回车键同步
  • 无法保存日志文件时回退到默认路径
  • 改进了便携模式下的相对配置路径处理

更多详情可查看:https://freefilesync.org/

FASTJSON 2.0 介绍

是项目的重要升级,目标是为下一个十年提供一个高性能的库。通过同一套,

  • 支持两种协议, 是一等公民。
  • 支持全量解析和部分解析。
  • 支持服务端、客户端、大数据场景。
  • 支持 https://alibaba.github.io/fastjson2/kotlin_cn
  • 支持 https://alibaba.github.io/fastjson2/json_schema_cn
  • 支持 (2.0.8.android)
  • 支持 (2.0.8.graal)

FASTJSON 2.0.8 版本介绍

经过很多用户在生产环境验证,2.0.8 完全生产可用。对fastjson 1.x也有很好的兼容性,如果不想改代码的同学,可以尝试直接使用2.0.8的兼容包升级,兼容包是计划长期维护的,如果发现问题提issue反馈。

Issues

  1. 修改LocalDateTime的缺省序列化格式为”yyyy-MM-dd HH🇲🇲ss”,LocalDate的缺省序列化格式为”yyyy-MM-dd”,LocalTime的缺省序列化格式为”HH🇲🇲ss”,没有特定需求时,不需要做配置定制序列化。 #463 #459
  2. Date对象反序列化支持输入空字符串识别为null #467 #504 #493
  3. 修复某些场景日期类型配置JSONField.format无效的问题 #468 #495
  4. 兼容包支持ParserConfig配置propertyNamingStrategy #505
  5. 修复TypeReference传入参数无法正确解析的问题 #501 #474
  6. 修复BigDecimal类型反序列化输入科学计数法数值结果不对的问题 #492
  7. 兼容包支持Feature. UseNativeJavaObject #488
  8. 修复JSONPath在多层嵌套读取结果不对的问题 #487
  9. 修复兼容包JSON.parseObject不支持输入空置的问题 #482
  10. 修复mongo GeoJsonPoint类型的支持 bug #483
  11. 修复JSONPath设置多层节点不存在时不生效的问题 #476
  12. JSONArray保留toJSONString方法,方便升级,提升兼容性
  13. JSON.parseObject方法支持InputStream和Reader输入 #103
  14. 修复JSONPath对”$”结果返回不对的问题
  15. 修复JSONWriter.Feature.IgnoreNoneSerializable对rootObject不生效的问题 #477
  16. 新增支持ContextNameFilter/ContextValueFilter #484
  17. 修复对象数组类型字段反序列化报错的问题 #464
  18. 修复PropertyFilter导致输出Null的问题 #471

MAVEN 依赖配置

 <dependency> <groupId>com.alibaba.fastjson2</groupId> <artifactId>fastjson2</artifactId> <version>2.0.8</version> </dependency>
  • GraalVM版本
 <dependency> <groupId>com.alibaba.fastjson2</groupId> <artifactId>fastjson2</artifactId> <version>2.0.8.graal</version> </dependency>
  • Android版本
 <dependency> <groupId>com.alibaba.fastjson2</groupId> <artifactId>fastjson2</artifactId> <version>2.0.8.android</version> </dependency>
  • 1.x 兼容版本
 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>2.0.8</version> </dependency>

相关链接

  • 相关issue 25个 https://github.com/alibaba/fastjson2/milestone/7
  • 代码tag https://github.com/alibaba/fastjson2/releases/tag/2.0.8
  • 标准版本 https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.8/
  • graal支持版本 https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.8.graal/ (仅在GraalVM 22.1 JDK17上做过验证)
  • android版本 https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.8.android/
  • 1.x兼容版本 https://repo1.maven.org/maven2/com/alibaba/fastjson/2.0.8/

详情可查看:https://github.com/alibaba/fastjson2/releases/tag/2.0.8 

VirtualEnv 20.15.0 发布了,VirtualEnv 用于在一台机器上创建多个独立的 Python 运行环境,可隔离项目之间的第三方包依赖,为部署应用提供方便,把开发环境的虚拟环境打包到生产环境即可,不需要在服务器上再折腾一翻。 

新版更新内容如下:

  • 升级 actions/setup-python   #2360
  • 升级 actions/checkout   #2359
  • 升级 pre-commit/action    #2358
  • 升级 actions/download-artifact   #2357
  • 升级  actions/upload-artifact   #2356
  • 修复 CI 中损坏的 Nushell 安装 #2364
  • Windows PyPy 3.6 的修复 #2363
  • Windows 嵌入式支持 #2353
  • 升级设置工具 #2365

更新公告:https://github.com/pypa/virtualenv/releases/tag/20.15.0

 

PyCharm激活2022.1(PyCharm 2022.1.3 发布)关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

PyCharm激活2022.1(PyCharm 2022.1.3 发布)关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

洛雪音乐助手是一个功能强大、音乐齐全、操作简单的音乐播放器,支持导入其他主流音乐播放器的歌单、支持多设备同步功能,可在 Windows、MacOS、Linux 平台运行。

目前洛雪音乐更新到 1.22.0 版本,带来大量优化,建议升级体验新功能:

新增

  • 新增设置-以全屏模式启动设置
  • 新增设置-桌面歌词设置-鼠标移入歌词区域时降低歌词透明度(#883),默认关闭,此设置不支持linux,注:此功能存在兼容性问题,若鼠标移出后无法恢复到正常透明度,可尝试再移入移出即可恢复

优化

  • 添加歌曲到“我的列表”时,若按住键(Mac对应),则不会自动关闭添加窗口,这对想要将同一首(一批)歌曲添加到多个列表时会很有用
  • 支持 mg 源逐字歌词的播放、
  • 添加歌曲列表更新操作的二次确认
  • 添加导入文件错误时的指引提示

修复

  • 修复若配置了环境变量时,会意外使用此代理配置的问题
  • 修复多选后切换列表后不会清空多选内容的问题
  • 修复设置快捷键时的处理逻辑问题
  • 修复在新建歌单输入框、歌单内歌曲搜索输入框会意外触发设置的全局快捷键的问题(#879)

文档

桌面版文档已迁移到:https://lyswhut.github.io/lx-music-doc/desktop

其他

  • 更新 Electron 到 v17.4.7

更新公告:https://github.com/lyswhut/lx-music-desktop/releases/tag/v1.22.0

PyCharm激活2022.1(PyCharm 2022.1.3 发布)关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

本周更新内容:

1、出入库单增加今日筛选条件

2、如果用户登录名为邮箱,填入该用户的邮箱字段

3、最后采购成本忽略价格为0的采购单

4、商品增加调拨次数和BOM个数,并可按钮查看

5、最后采购成本更新时填充默认供应商

6、商品的获取方式跟BOM走

7、洞察模块增加当前用户日期等变量

8、业务伙伴和销售单据上不可直接创建付款方式

9根菜单顺序调整

10、商品分类名称不可重复

11类别中属性变更为【商品属性】

12、工序增加代码,并可根据代码搜索

13、生产领料单上增加生产加工单字段。

14、新模块:批量修改客户负责人

15、新增下级科目可指定外币

16、采购入库单、退货单可显示采购订单号。

 

本周最佳贡献者:南京-老C

 

更新提示:

1、所有基于Odoo13框架的GoodERP用户支持升级到此版本

2、更新源码后需要重启并升级 core 模块更新界面

 

===================

GoodERP采取收费会员更新模式

  • 月会员 400
  • 年会员 3000
  • 终身会员 10000
  • 下一贡献奖励 149 个红包

PyCharm激活2022.1(PyCharm 2022.1.3 发布)关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

Zotero 是一个参考文献管理软件,也是一个免费 Firefox 和 Google 浏览器扩展。Zotero 可以协助用户收集、管理及引用研究资源,包括期刊、书籍等各类文献和网页、图片等。

目前,Zotero 6.0.9 已发布, 该版本更新内容如下:

功能更改或添加

  • 从 PDF 阅读器侧边栏的缩略图选项卡添加 PDF 页面旋转和删除

已修复的错误

  • 修复了 ScienceDirect PDF 的下载

  • 修复了 library tab tooltip 在切换应用程序后保持可见

  • 修复了对一些设置为彩色标签的表情符号的检测

  • 修复了中文和其他 non-ASCII 月份名称的解析

  • [Mac] 修复了拖拽过程中的强制有时会导致意外的 collection switching

  • [Mac] 修复了在 macOS 上编辑集合名称时选项箭头不起作用的问题

  • 修复了按附件列排序的问题

  • 在笔记编辑器中聚焦搜索栏时选择搜索输入文本

  • 修复了在包含重音字符的注释中突出显示搜索结果的位置

  • 修复了 Preprint item type 中 Archive ID 到 CSL 编号字段的映射问题

  • 修复了纯文本输出中某些数字样式(IEEE、Nature)的引文编号后不出现空格的问题

更新说明:https://www.zotero.org/support/changelog

PyCharm激活2022.1(PyCharm 2022.1.3 发布)关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

PyCharm激活2022.1(PyCharm 2022.1.3 发布)关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

CBL-Mariner(CBL 即 Common Base Linux)是微软内部使用的 Linux 发行版,它不是桌面 Linux 而是服务器端 Linux,它被用于微软的云基础设施以及边缘产品和服务。CBL-Mariner 旨在为这些设备和服务提供一致的平台,并增强微软在 Linux 更新方面与时俱进的能力。

CBL-Mariner 2.0 带来海量新内容,包含许多 Bug 修复、软件包更新以及新增功能。

比如添加了 Kpatch 等新软件包,用于内核修补支持,并为其内核配置启用实时修补。其次是在 Mariner 安装程序中添加了 PXE 引导支持,以及许多其他更改。

包更新例如迁移到 Golang 1.18.3、Linux 5.15.45.1 作为较新的 Linux LTS 内核版本、Ncurses 6.3、Redis 6.2.7,以及许多其他主要以安全修复为主的驱动包更新,此外还修复了各种常规错误。

感兴趣的朋友可以查看版本更新。

SQLite 是一个 C 语言库,实现了一个小型、快速、独立、高可靠性、全功能的 SQL 数据库引擎。SQLite 是世界上使用最多的数据库引擎。SQLite 的源代码属于公共领域,每个人都可以免费使用,用于任何目的。

SQLite 3.39.0 正式发布,更新内容如下:

  • 添加了对 RIGHT 和 FULL OUTER JOIN 的支持。
  • 添加新的二进制比较运算符 IS NOT DISTINCT FROM 和 IS DISTINCT FROM ,它们分别等效于 IS 和 IS NOT,以与 PostgreSQL 和 SQL 标准兼容。
  • 从 sqlite3_vtab_distinct() 接口添加一个新的 return code(值为“3”),表示一个查询同时具有 DISTINCT 和 ORDER BY 子句。
  • 添加了 sqlite3_db_name() 接口。
  • unix os 接口解析数据库文件名中的所有符号链接,以便在打开文件之前为数据库创建一个规范名称。
  • 推迟 materializing views,直到实际需要 materialization,从而避免在 materialization 从未被使用时进行不必要的工作。
  • 现在,任何聚合查询都允许使用 SELECT 语句的 HAVING 子句,即使是没有 GROUP BY 子句的查询。
  • 一些微小的优化共同将 CPU 周期减少了约 2.3%。

Hashes

  • SQLITE_SOURCE_ID: 2022-06-25 14:57:57 14e166f40dbfa6e055543ff2ca2e96a02ab9e69e162e98918
  • SHA3-256 for sqlite3.c: d9c439cacad5e4992d0d25989cfd27a4c4f59a3183c97873bc03f0ad1aa78b7a

详情可查看:https://sqlite.org/changes.html

PyCharm激活2022.1(PyCharm 2022.1.3 发布)关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

版本名称 版本说明 版本地址 GoFrame+Layui 混编版 采用 GoFrame、Layui 等框架研发 https://gitee.com/easygoadmin/EasyGoAdmin_GoFrame_Layui Beego+Layui 混编版 采用 Beego、Layui 等框架研发 https://gitee.com/easygoadmin/EasyGoAdmin_Beego_Layui Gin+Layui 混编版 采用 Gin、Layui 等框架研发 https://gitee.com/easygoadmin/EasyGoAdmin_Gin_Layui Iris+Layui 混编版 采用 Iris、Layui 等框架研发 https://gitee.com/easygoadmin/EasyGoAdmin_Iris_Layui GoFrame+EleVue 前后端分离版 采用 GoFrame、Vue、ElementUI 等框架研发前后端分离版本 https://gitee.com/easygoadmin/EasyGoAdmin_GoFrame_EleVue Beego+EleVue 前后端分离版 采用 Beego、Vue、ElementUI 等框架研发前后端分离版本 https://gitee.com/easygoadmin/EasyGoAdmin_Beego_EleVue Gin+EleVue 前后端分离版 采用 Gin、Vue、ElementUI 等框架研发前后端分离版本 https://gitee.com/easygoadmin/EasyGoAdmin_Gin_EleVue Iris+EleVue 前后端分离版 采用 Iris、Vue、ElementUI 等框架研发前后端分离版本 https://gitee.com/easygoadmin/EasyGoAdmin_Iris_EleVue GoFrame+AntdVue 前后端分离版 采用 GoFrame、Vue、AntDesign 等框架研发前后端分离版本 https://gitee.com/easygoadmin/EasyGoAdmin_GoFrame_AntdVue Beego+AntdVue 前后端分离版 采用 Beego、Vue、AntDesign 等框架研发前后端分离版本 https://gitee.com/easygoadmin/EasyGoAdmin_Beego_AntdVue Gin+AntdVue 前后端分离版 采用 Gin、Vue、AntDesign 等框架研发前后端分离版本 https://gitee.com/easygoadmin/EasyGoAdmin_Gin_AntdVue Iris+AntdVue 前后端分离版 采用 Iris、Vue、AntDesign 等框架研发前后端分离版本 https://gitee.com/easygoadmin/EasyGoAdmin_Iris_AntdVue 版本名称 说明 地址 JavaWeb 混编专业版 采用 SpringBoot2+Thymeleaf+layui https://gitee.com/javaweb520/JavaWeb JavaWeb_Pro 混编旗舰版 采用 SpringBoot2+Thymeleaf+layui https://gitee.com/javaweb520/JavaWeb_Pro JavaWeb_Vue 专业版 前后端分离版,采用 SpringBoot2+Vue+ElementUI https://gitee.com/javaweb520/JavaWeb_Vue JavaWeb_Vue_Pro 旗舰版 采用 SpringBoot2+Vue+ElementUI https://gitee.com/javaweb520/JavaWeb_Vue_Pro JavaWeb_Ant_Pro 旗舰版 采用 SpringBoot2+Vue+AntDesign https://gitee.com/javaweb520/JavaWeb_Ant_Pro JavaWeb_Cloud 微服务专业版 采用 SpringCloud+Vue+ElementUI https://gitee.com/javaweb520/JavaWeb_Cloud JavaWeb_Cloud_Pro 微服务旗舰版 采用 SpringCloud+Vue+ElementUI https://gitee.com/javaweb520/JavaWeb_Cloud_Pro JavaWeb_Cloud_Ant 微服务旗舰版 采用 SpringCloud+Vue+AntDesign https://gitee.com/javaweb520/JavaWeb_Cloud_Ant

Eurynome Cloud 是一款企业级微服务架构和服务能力开发平台。首个全面拥抱 Spring Authorization Server 的版本,基于Spring Boot 2.7.1、Spring Cloud 2021.0.3、Spring Cloud Alibaba 2021.0.1.0、 Spring Authorization Server 0.3.1、Nacos 2.1.0 等最新版本开发,遵循SpringBoot编程思想,高度模块化和可配置化。具备服务发现、配置、熔断、限流、降级、监控、多级缓存、分布式事务、工作流等功能

平台定位

  • 构建成熟的、完善的、全面的,基于 OAuth2 的、前后端分离的微服务架构解决方案。
  • 面向企业级应用和互联网应用设计开发,既兼顾传统项目的微服务化,又满足互联网应用开发建设、快速迭代的使用需求。
  • 平台架构使用微服务领域及周边相关的各类新兴技术或主流技术进行建设,是帮助快速跨越架构技术选型、研究探索阶段的利器。
  • 代码简洁规范、结构合理清晰,是新技术开发应用的典型的、综合性案例,助力开发人员对新兴技术的学习和掌握。

[1]、发布背景

2021年11月8日 Spring 官方已经强烈建议使用 Spring Authorization Server 替换已经过时的 Spring Security OAuth2.0。

在 Spring Security OAuth2 彻底停止维护、Spring Boot 2.7.0 正式发布之时,又恰逢 Eurynome Cloud 开源一周年之际,推出基于 Spring Authorization Server 0.3.0、Spring Boot 2.7.0、Spring Cloud 2021.0.3、Spring Cloud Alibaba 2021.0.1.0 和 Nacos 2.1.0 的全新正式版本,细节满满,欢迎品鉴。

[2]、重要说明

由于 Spring Authorization Server 0.3.0 版本,使用 Java 11 进行代码编译。导致使用该版本在 Java 8 下代码已无法编译成功,所以必须要升级 JDK 版本。同时,考虑到 2022 年 11 月,Spring Boot 3 将会发布,最低版本要求 Java 17。因此,直接将 Java 版本升级至 17。Eurynome Cloud 2.7.0.20 ~ 2.7.0.50 均是采用 Java 17 编译运行,同时不兼容 Java 8。

不管是 Spring Authorization Server 还是本项目 Eurynome Cloud,各路网友均不主张在现阶段直接将 Java 升级 17,而是希望继续兼容 Java 8,在 Spring Boot 3 发布以后再统一升级为默认使用 Java 17

因此 Spring Authorization Server 0.3.1 版本,代码降级兼容了 Java 8。Eurynome Cloud 也同步进行了代码的降级兼容处理,以兼容 Java 8。经过验证,目前 Erurynom Cloud 在 Java 8、11、17 环境下均可以正常稳定运行

Spring Authorization Server 发布两个版本,Eurynome Cloud 使用的 Java 版本就跟着变,升到 Java 17 又跟着降回 Java 8,折腾一圈浪费功夫。看似折腾实则不然,经此一役,Eurynome Cloud 已经完全支持 Java 8 Java 11 和 Java 17,未来升级使用 Spring Boot 3 也不是问题。验证了那句话“用心认真走过的每条路都不会白走”

[3]、本次更新内容

  • 重要更新
    • Spring Boot 版本升级至 2.7.1
    • Spring Boot Admin 版本升级至 2.7.1
    • Skywalking Java Agent 版本升级至 8.11.0
  • 其它更新
    • [新增] 增加通过范围代码查询应用范围接口
    • [新增] 增加自定义打包的 JDK 镜像 herodotus/oracle-jdk:8u331,彻底根除服务在 Docker 环境下由于使用 OpenJDK 版本不同的差异导致无法读取字体出错,以及打包成镜像过程中下载字体慢的问题。该镜像已经上传至 Docker Hub,可以直接下载使用。
    • [新增] 对几款常用的 OpenJDK 基础镜像进行了验证,在 Dockerfile 中,新增了适合使用的两个版本 JDK 基础镜像配置,放开注释即可选择使用。
    • [优化] 优化涉及字体读取的行为验证码和图形验证码代码,增强在不同系统和不同 Java 版本下的兼容性。
    • [修复] 调整 Skywalking Docker Compose 配置参数,解决 8.7.0-es7 以后版本 Skywalking Docker 无法正常启动问题。
    • [删除] 删除项目核心 dependencies 中,与新版本 spring-boot-dependencies 中重复的依赖及版本 pom 配置,尽量使用 spring-boot-dependencies 对项目大部分依赖版本进行管控,减少依赖的重复配置以及版本不兼容问题。
  • 依赖更新
    • WxJava 版本升级至 4.3.6.B
    • mapstruct-processor 版本升级至 1.5.2.Final
    • mybatis-plus-boot-starter 版本升级至 3.5.2
    • tencentcloud-sdk-java 版本升级至 3.1.537
    • alipay-sdk-java 版本升级至 4.31.28.ALL
    • jpush-client 版本升级至 3.6.3

[4]、Eurynome Cloud 2.7.X 主要变化

  • 基于 深度定制:

    • 基于 ,重新构建 基础数据存储代码,替代原有 JDBC 数据访问方式,破除 原有数据存储局限,扩展为更符合实际应用的方式和设计。
    • 基于 ,在 OAuth 2.1 规范基础之上,增加自定义“密码”认证模式,以兼容现有基于 OAuth 2 规范的、前后端分离的应用。
    • 基于 ,在 OAuth 2.1 规范基础之上,增加自定义Social Credentials 认证模式,支持手机短信验证码、微信小程序、第三方应用登录。
    • 遵照 以及 的代码规范,进行 OAuth2 认证服务器核心代码的开发,遵照其使用 Jackson 反序列化的方式, 增加大量自定义 Jackson Module。
    • 支持 的标准的Token加密校验方式外,还了增加支持自定义证书的 Token 加密方式,可通过配置动态修改
    • 支持 OAuth2 OIDC 认证模式,补充前端 OIDC 认证相关配置操作,以及对应的 /userinfo 接口调用支持 和 客户端注册支持
    • 支持 OAuth2 Authorization Code PKCE 认证模式
    • 扩展 默认的 模式,实现 Refresh Token 的创建。
    • 扩展 默认的 模式,实现真正的使用 Scope 权限对接口进行验证。 增加客户端 Scope 的权限配置功能,并与已有的用户权限体系解耦
    • 自定义 授权码模式登录认证页面和授权确认页面,授权码模式登录采用数据加密传输。支持多种验证码类型,暂不支持行为验证码。
  • 代码结构的大规模调整和优化:

    • 对原有代码进行了深度的“庖丁解牛”,严格遵照“单一职责”原则,根据各个组件的职责以及用途,将整个工程拆解细化为多个各自独立组件模块,在最大程度上降低代码间的耦合,也更容易聚焦和定位问题。
    • 将通用化组件提取为独立工程,独立编译、按需选用,极大的降低系统主工程代码量。相关组件也已上传至 Maven 中央仓库,降低系统主工程工程代码编译耗时,改进和提升 CICD 效率,
    • 原有主工程代码结构也进行了深化调整,代码分包更加合理,代码逻辑也更加清晰。

[5]、额外说明

  1. 本项目以后将主要维护  Spring Authorization Server  版本,原有基于 Spring Security OAuth2  的版本已经移至 spring-security-oauth2 分支,可以从该分支或发行版页面获取历史版本继续使用。后期会根据 ISSUE 以及使用用户反馈情况,再行决定是否继续维护  Spring Security OAuth2 版本。
  2. 最新版本代码,暂时继续沿用原有基于 Vue2、Vuetify2、Typescript开发的前端系统。基于 Vue3、Vite2、Quasar、Pinia、Typescript 的新版前端正在加进开发中,预计本月底发布。
  3. 原有基于 Vue2、Vuetify2、Typescript 开发的前端,由于使用了过渡性 Typescript IOC 组件,以及依赖组件版本限制等问题,初次接触该项目在编译过程中会出现一些问题,请移步至本项目在线文档,详见“常见问题”章节。

 

1.去掉原库设置中缩略图转换开关,站点设置增加存储位置设置,存储位置目前支持本地(默认),腾讯云存储
2.本地存储位置图片处理功能开启关闭,将控制普通目录图片类文件缩略图和颜色信息获取,支持GD和imagick两种设置,其中imagick将支持特殊格式图片缩略图获取,
包括并不限于ai、psd等格式,具体支持格式可在设置界面内查看
3.本地存储位置视频处理功能开启关闭,将控制普通目录音视频类文件缩略图和信息获取,支持不能直接播放媒体文件转码,目前使用ffmpeg作为支持,具体支持格式可在设置界面内查看
4.本地存储位置文档处理功能开启关闭,将控制普通目录文档类文件缩略图获取,支持文档在线预览(不限于普通目录),目前使用onlyoffice作为支持,具体支持格式可在设置界面内查看
5.腾讯云位置图片处理功能开启关闭,将控制腾讯云存储中普通目录图片类文件缩略图和颜色信息获取,具体支持格式可在设置界面内查看
6.腾讯云位置位置视频处理功能开启关闭,将控制腾讯云存储中普通目录音视频类文件缩略图和信息获取,支持不能直接播放媒体文件转码,具体支持格式可在设置界面内查看
7.腾讯云位置位置文档处理功能开启关闭,将控制腾讯云存储中普通目录文档类文件缩略图,支持文档在线预览(不限于普通目录),具体支持格式可在设置界面内查看
8.修复billfish库导入颜色权重未写入问题
9.修改缩略图处理结构,优化缩略图处理逻辑,并支持billfish中特殊格式详情页高清图
10.库设置中增加腾讯云存储位置库添加
11.优化界面处理,修复已知界面问题
12.优化库删除逻辑
13.其他已知bug修复

v2.6.5
changelog:

修复一些安全漏洞
更新一些后台文案提示
优化统计数据上报接口

Fix some security vulnerabilities
Update some tips messages of fizz manager
Optimize reporting interfaces of statistics

Fizz Gateway 是什么?

An Aggregation API Gateway in Java . Fizz Gateway 是一个基于 Java 开发的微服务聚合网关,能够实现热服务编排聚合、自动授权选择、线上服务脚本编码、在线测试、高性能路由、API 审核管理、回调管理等目的,拥有强大的自定义插件系统可以自行扩展,并且提供友好的图形化配置界面,能够快速帮助企业进行 API 服务治理、减少中间层胶水代码以及降低编码投入、提高 API 服务的稳定性和安全性。

演示环境(Demo)

http://demo.fizzgate.com/

账号 / 密码:/

健康检查地址:http://demo.fizzgate.com/admin/health (线上版本请限制 admin 路径的外网访问)

API 地址:http://demo.fizzgate.com/proxy/[服务名]/[API_Path]

Fizz 的设计

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

产品特性

  • 集群管理:Fizz 网关节点是无状态的,配置信息自动同步,支持节点水平拓展和多集群部署。
  • 安全授权:支持内置的 key-auth, JWT, basic-auth 授权方式,并且可以方便控制。
  • 服务编排:支持 HTTP、Dubbo、gRPC、Soap 协议热服务编排能力,支持前后端编码,支持 JSON/XML 输出,随时随地更新 API。
  • 负载均衡:支持 round-robin 负载均衡。
  • 多注册中心:支持从 Eureka 或 Nacos 注册中心进行服务发现。
  • 配置中心:支持接入 apollo 配置中心。
  • HTTP 反向代理:隐藏真实后端服务,支持 Rest API 反向代理。
  • 访问策略:支持不同策略访问不同的 API、配置不同的鉴权等。
  • IP 黑白名单:支持配置 IP 黑白名单。
  • 自定义插件:强大的插件机制支持自由扩展。
  • 可扩展:简单易用的插件机制方便扩展功能。
  • 高性能:性能在众多网关之中表现优异。
  • 版本控制:支持操作的发布和多次回滚。
  • 管理后台:通过管理后台界面对网关集群进行各项配置。
  • 回调管理:支持回调的管理、订阅、重放、以及日志。
  • 多级限流:细颗粒度的限流方式包含服务限流,接口限流,APP_ID 限流,IP 限流。
  • 微服务文档:企业级管理开放微服务文档管理,系统集成更方便。
  • 公网专线:建立公网中受到完全保护的私有连接通道。
  • 策略熔断:根据服务或者具体地址进行多种恢复策略熔断配置。

基准测试

我们将 Fizz 与市面上主要的网关产品进行比较,使用相同的环境和条件,测试对象均为单个节点。Mock 接口模拟 20ms 时延,报文大小约 2K。

  • Intel(R) Xeon(R) CPU E5-2650 v3 @ 2.30GHz * 4
  • Linux version 3.10.0-957.21.3.el7.x86_64
  • 8G RAM
分类 产品 600 并发

QPS 600 并发

90% Latency(ms) 1000 并发

QPS 1000 并发

90% Latency(ms) 后端服务 直接访问后端服务 23540 32.19 27325 52.09 流量网关 kong

v2.4.1 15662 50.87 17152 84.3 应用网关 fizz-gateway-community

v2.0.0 12206 65.76 12766 100.34 应用网关 spring-cloud-gateway

v2.2.9 11323 68.57 10472 127.59 应用网关 shenyu

v2.3.0 9284 92.98 9939 148.61

版本对照

  • Fizz-gateway-community: 社区版

  • Fizz-manager-professional:管理后台专业版(服务端)

  • Fizz-admin-professional:管理后台专业版(前端)

Fizz-gateway-community Fizz-manager-professional Fizz-admin-professional v1.0.0 v1.0.0 v1.0.0 v1.1.0 v1.1.0 v1.1.0 v1.1.1 v1.1.1 v1.1.1 v1.2.0 v1.2.0 v1.2.0

从 v1.3.0 开始管理后台的前端和服务端合并成一个包

  • Fizz-gateway-community: 社区版

  • Fizz-manager-professional:管理后台

Fizz-gateway-community Fizz-manager-professional v1.3.0 v1.3.0 v1.4.0 v1.4.0 v1.4.1 v1.4.1 v1.5.0 v1.5.0 v1.5.1 v1.5.1 v2.0.0 v2.0.0 v2.1.0 v2.1.0 v2.2.0 v2.2.0 v2.2.1 v2.2.1 v2.2.3 v2.2.3 v2.3.0 v2.3.0 v2.3.2 v2.3.2 v2.3.3 v2.3.3 v2.4.0 v2.4.0 v2.4.1 v2.4.1 v2.5.0 v2.5.0 v2.5.1 v2.5.1 v2.5.2 v2.5.2 v2.6.0 v2.6.0 v2.6.1 v2.6.1 v2.6.2 v2.6.2 v2.6.3 v2.6.3

请根据社区版的版本下载对应的管理后台版本

部署说明

详细部署教程 >>>

安装依赖

安装以下依赖软件:

  • Redis 2.8 或以上版本
  • MySQL 5.7 或以上版本
  • Apollo 配置中心 (可选)
  • Eureka 或 Nacos 服务注册中心 (可选)

依赖的安装可参考详细部署教程

安装 Fizz

一、安装管理后台

从 github 的 releases (https://wj..com/s2//8fe2/) 下载 fizz-manager-professional 安装包

管理后台(fizz-manager-professional)

说明:

  1. 以下安装步骤出现的  表示所使用管理后台的版本号,例如 

安装方式一:二进制安装包

  1. 解压  安装包
  2. 首次安装执行  数据库脚本,从低版本升级至高版本选择执行 update 目录下对应升级脚本
  3. 修改  文件,将相关配置修改成部署环境的配置
  4. Linux 启动 执行  命令给  增加执行权限;执行  命令启动服务,支持 start/stop/restart/status 命令
  5. Windows 启动 执行 命令启动服务,支持 start/stop/restart/status 命令

安装方式二(v2.0.0 或以上版本):docker:

  1. 下载对应版本的镜像:docker pull fizzgate/fizz-manager-professional:{version}
  2. 通过环境变量方式修改 redis 配置、database 配置(其它配置同理)并运行镜像
 docker run --rm -d -p 8000:8000 -e "spring.redis.host={your redis host IP}" -e "spring.redis.port={your redis port}" -e "spring.redis.password={your redis password}" -e "spring.redis.database={your redis database}" -e "spring.datasource.url=jdbc:mysql://{your MySQL database host IP}:3306/fizz_manager?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true" -e "spring.datasource.username={your MySQL database username}" -e "spring.datasource.password={your MySQL database password}" fizzgate/fizz-manager-professional:{version}

或通过映射目录方式使用外部配置文件和输出日志到宿主机,配置文件可从安装包里获取,在宿主机创建 fizz-manager-professional/config 和 fizz-manager-professional/logs 目录,把 application-prod.yml 配置文件放置 config 下,在 fizz-manager-professional 目录下运行镜像

 cd fizz-manager-professional docker run --rm -d -p 8000:8000 -v $PWD/config:/opt/fizz-manager-professional/config -v $PWD/logs:/opt/fizz-manager-professional/logs fizzgate/fizz-manager-professional:{version}

服务启动后访问 http://{部署机器 IP 地址}:8000/#/login,使用超级管理员账户  密码  登录

二、安装 fizz-gateway-community 社区版

说明:

  1. 支持配置中心:apollo、nacos,支持注册中心:eureka、nacos,详细配置方法查看 application.yml 文件。
  2. 如果使用 apollo 配置中心,可把 application.yml 文件内容迁到配置中心(apollo 上应用名为:fizz-gateway);如果不使用 apollo 可去掉下面启动命令里的 apollo 参数。
  3. 以下安装步骤出现的  表示所使用网关的版本号,例如 

安装方式一:二进制安装包

  1. 下载 fizz-gateway-community 的二进制安装包,解压修改 application.yml 配置文件里配置中心、注册中心、redis (redis 配置需与管理后台一致) 的配置
  2. 根据需要修改 boot.sh 脚本的 apollo 连接,不使用 apollo 配置中心可跳过
  3. Linux 启动 执行  命令启动服务,支持 start/stop/restart/status 命令
  4. Windows 启动 执行 命令启动服务,支持 start/stop/restart/status 命令

安装方式二:源码安装:

  1. 本地 clone 仓库上的最新代码,修改 application.yml 配置文件里配置中心、注册中心、redis (redis 配置需与管理后台一致) 的配置
  2. 在项目根目录 fizz-gateway-community 下执行 Maven 命令 
  3. 在项目目录 fizz-gateway-community/fizz-bootstrap 下执行 Maven 命令 
  4. 进入 fizz-gateway-community/fizz-bootstrap/target/fizz-gateway-community 目录,执行  命令启动服务,支持 start/stop/restart/status 命令

安装方式三(v2.0.0 或以上版本):docker:

  1. 下载对应版本的镜像:docker pull fizzgate/fizz-gateway-community:{version}
  2. 通过环境变量方式修改 redis 配置(其它配置同理)并运行镜像
 docker run --rm -d -p 8600:8600 -e "aggregate.redis.host={your redis host IP}" -e "aggregate.redis.port={your redis port}" -e "aggregate.redis.password={your redis password}" -e "aggregate.redis.database={your redis database}" fizzgate/fizz-gateway-community:{version}

或通过映射目录方式使用外部配置文件和输出日志到宿主机,配置文件可从安装包或源码里获取,在宿主机创建 fizz-gateway-community/config 和 fizz-gateway-community/logs 目录,把 application.yml 和 log4j2-spring.xml 配置文件放置 config 下,在 fizz-gateway-community 目录下运行镜像

 cd fizz-gateway-community docker run --rm -d -p 8600:8600 -v $PWD/config:/opt/fizz-gateway-community/config -v $PWD/logs:/opt/fizz-gateway-community/logs fizzgate/fizz-gateway-community:{version}

最后访问网关,地址形式为:http://127.0.0.1:8600/proxy/[服务名]/[API_Path]

 

ioGame 是一个由 java 语言编写的网络游戏服务器框架。支持 websocket、tcp ,适用于全球同服、回合制游戏、策略游戏、即时战斗等游戏服务器的开发。具有高性能、稳定、易用易扩展、超好编程体验等特点。可做为 H5、手游、端游的 java 游戏服务器。

ioGame 是轻量级的网络游戏服务器框架,在使用 ioGame 时,无需安装其他服务,如: Nginx、Redis、MQ、Mysql、ZooKeeper、Protobuf协议编译工具 … …等。简单点说,就是无需安装其他产品就能使用;这意味着在使用上简单了,在部署上也为企业节约了成本。

通过 ioGame 你可以很容易的搭建出一个稳定、高性能、集群无中心节点、分步式、自带负载均衡、跨进程通信、避免类爆炸设计的网络游戏服务器。游戏框架借助于蚂蚁金服 sofa-bolt 通信框架来提供通信方面的稳定与高性能

在 ioGame 中能让你遗忘 Netty,你几乎没有机会能直接的接触到 Netty 的复杂,但却能享受 Netty 带来的高性能。对开发者要求极低,为开发者节约开发时间。

即使之前没有游戏编程的经验,也能参与到游戏编程中。如果你之前具备一些游戏开发或者 webMVC 相关的知识,则会更容易上手游戏服务的开发。

ioGame 可以很方便的与 spring 集成(5 行代码)。在部署上支持多服单进程的方式部署(类似单体应用)、也支持多服多进程多机器的方式部署。在部署方式上可以随意切换,而不需要更改代码;日常中按照单体思维开发,在生产上可以使用多进程的方式部署;当然,也可以使用单进程的方式部署。

ioGame 框架职责清晰、业务开发几乎零学习成本、源码有高质量注释、示例多、使用文档多,开发体验最佳、对接文档自动生成、逻辑服之间可跨进程跨机器通信、业务代码定位–神级特性、异常机制。

ip2region (2.0 – xdb) 是一个离线的 IP 数据管理框架和定位库,10微秒级别的查询性能,提供了很多主流编程语言的 xdb 数据格式的生成和查询实现。

ip2region 2.6.1 弃用了之前的 1.0 的数据管理方式,重新设计了全新的 xdb 数据管理引擎,相比旧的引擎优缺点如下:

1、xdb 可以管理上亿级别的 IP 数据段,旧的数据引擎因为设计上的缺陷,超过 50 万行就会导致 btree 索引溢出,xdb 会彻底告别这个问题。

2、更快的查询速度 – 10微秒级别的查询性能,xdb 数据管理引擎采用了 512KiB 固定的向量空间索引,利用一次固定的磁盘 IO 操作 (可缓存) 即可最大化的减少后续 binary 查询的次数,大部分的查询固定在 3 次 IO 操作,如果提前缓存 512KiB 的向量索引,可以固定的减少一次 IO 操作。如下是我的 razer 笔记本的 bench 测试结果 (三星 860 pro SSD磁盘,缓存向量索引):

golang bench 程序: https://gitee.com/lionsoul/ip2region/blob/master/binding/golang

 

php bench 程序:https://gitee.com/lionsoul/ip2region/blob/master/binding/php

 

java bench 程序:https://gitee.com/lionsoul/ip2region/blob/master/binding/java

 

3、更简洁的代码和 API 实现:相比旧的三种查询算法,xdb 只有一个 search 接口,而且这个查询接口的实现代码也少很多,其他都是工具函数。

4、缓存加速支持:xdb 引擎支持完全基于文件查询,也可以用固定的 512KiB 的内存缓存 `向量索引` 固定的减少一次磁盘 IO 加速查询,也可以完全的缓存整个 xdb 数据实现完全基于内存的查询,类似旧版本的 memorySearch。

5、因为向量空间索引的设计,xdb 数据库文件会变大,这是相对旧版本来说是一个劣势的地方。

下载地址

目前发布的 2.6.1 版本包含了 golang 的生成程序和 golang/php/java 的查询程序,每个实现都有详细的 ReadMe 文档,c和lua的查询程序将会再下一个版本发布,资源地址如下:

Gitee:https://gitee.com/lionsoul/ip2region/tree/v2.6.1
Github:https://github.com/lionsoul2014/ip2region/tree/v2.6.1

ImgResizer 是一个基于 Golang 语言编写的命令行工具,其主要功能如下:

  1. 支持图片等比缩放,五种模式可供选择
  2. 支持图片格式转换,支持 bmp、tiff、jpg、jpeg、gif、png、webp 格式
  3. 支持自定义高度、宽度等参数
  4. 支持 Windows、Linux、macOS 等系统,众多分发包可供下载
 

最新发行版下载:

https://gitee.com/barat/imgresizer/releases/v1.3

https://github.com/barats/ImgResizer/releases/tag/v1.3

 

JetLinks 开源物联网平台

JetLinks 基于 Java8、Spring Boot 2.x、WebFlux、Netty、Vert.x、Reactor 等开发,是一个开源的企业级物联网基础开发平台,实现了物联网相关以及相关业务开发的众多基础功能,能帮助你快速建立物联网相关业务系统。

在线完整功能演示地址: http://demo.jetlinks.cn 用户名: 密码: 

测试用户未开放全部权限,建议本地运行社区版体验或者联系商务试用企业版。

核心特性

开放源代码

全部源代码开放,可自由拓展功能,不再受制于人。前后端分离,接口全开放。

统一设备接入,海量设备管理

TCP/UDP/MQTT/HTTP、TLS/DTLS、不同厂商、不同设备、不同报文、统一接入,统一管理。

规则引擎

灵活的规则模型配置,支持多种规则模型以及自定义规则模型。设备告警,场景联动,均由统一的规则引擎管理。

超轻量级基于 SQL 的实时处理引擎 , 让数据处理更简单. 

多种数据存储策略

支持灵活的设备数据存储策略,可将不同类型的设备数据存储到不同的地方。

技术栈

  1. Spring Boot 2.3.x
  2. Spring WebFlux 响应式 Web 支持
  3. R2DBC 响应式关系型数据库驱动
  4. Project Reactor 响应式编程框架
  5. Netty ,Vert.x 高性能网络编程框架
  6. ElasticSearch 全文检索,日志,时序数据存储
  7. Redis 设备配置,状态管理,缓存
  8. PostgreSQL 业务功能数据管理
  9. hsweb framework 4 业务功能基础框架

架构

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

1.13-RELEASE

发布时间: 2022-06-25

代码分支: 

主要优化:

  1. 升级以及版本,支持.
  2. 修复网关子设备通过直连接入到平台时,状态可能不一致问题.
  3. 修复解绑租户成员不会触发资产解绑事件问题.(Pro)
  4. 优化设备租户信息同步逻辑(事务提交后再执行同步).(Pro)
  5. 增加在ReactorQL函数中获取设备配置信息.
  6. 优化视频录像逻辑,优化历史录像文件信息解析性能.(Pro付费模块)
  7. 修复国标视频点播时,ssrc对应的流ID可能错误问题.(Pro付费模块)
  8. 访问日志增加只能查看自己的日志功能.(Pro)
  9. 修复标签使用object或者array类型时,可能导致无法解析问题.
  10. 完善表字段说明以及单测试.(Pro)
  11. 增加统一的文件管理功能,来统一管理相对敏感的文件上传以及访问.

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

Forest 介绍

Forest 是一个开源的声明式 Java HTTP 客户端框架,它能够将 HTTP 的所有请求信息(包括 URL、Header 以及 Body 等信息)绑定到您自定义的 Interface 方法上,能够通过调用本地接口方法的方式发送 HTTP 请求

Forest 如何使用

Forest 不需要您编写具体的 HTTP 调用过程,只需要您定义一个接口,然后通过 Forest 注解将 HTTP 请求的信息添加到接口的方法上即可。请求发送方通过调用您定义的接口便能自动发送请求和接受请求的响应

Forest 的工作原理

Forest 会将您定义好的接口通过动态代理的方式生成一个具体的实现类,然后组织、验证 HTTP 请求信息,绑定动态数据,转换数据形式,SSL 验证签名,调用后端 HTTP API (httpclient 等 API) 执行实际请求,等待响应,失败重试,转换响应数据到 Java 类型等脏活累活都由这动态代理的实现类给包了。 请求发送方调用这个接口时,实际上就是在调用这个干脏活累活的实现类

获得奖项

2021 年度 OSC 中国开源项目评选「最受欢迎项目」

https://www.oschina.net/project/top_cn_2021

文档和示例

  • 项目官网
  • JavaDoc
  • Demo 工程

本次更新

BUG 修复:

  • fix: OKHTTP 连接泄漏问题 (#I5E613:OKHTTP 连接泄漏问题)
  • fix: 遇到无法解析的Cookie时会报空指针 (#I5E27R:遇到无法解析的Cookie时会报空指针)

 

PyCharm激活2022.1(PyCharm 2022.1.3 发布)关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

2022 年 6 月 27 日,KubeSphere 开源社区激动地向大家宣布,KubeSphere 3.3.0 正式发布!

CNCF 发布的 2021 年度调查报告指出,容器和 K8s 的事实地位已经趋于稳固,并慢慢退居 “幕后”,类似于无处不在的 Linux,人们甚至都感觉不到它的存在。这要得益于众多致力于降低用户使用门槛的 K8s 管理平台,KubeSphere 便是这其中的佼佼者,它帮助用户屏蔽了底层 K8s 集群的复杂性和差异性,提供了可插拔的开放式架构,无缝对接第三方应用,极大地降低了企业用户的使用门槛。

2021 年 KubeSphere 先后推出了 v3.1  v3.2 两个大版本,带来了 “边缘计算”“计量计费”“GPU 资源调度管理” 等众多令人期待的功能,将 K8s 从云端扩展至边缘,并进一步增强了在云原生 AI 场景的使用体验。

今天,KubeSphere 3.3.0 带来了更多令人期待的功能,新增了基于 GitOps 的持续部署方案,进一步优化了 DevOps 的使用体验。同时还增强了 “多集群管理、多租户管理、可观测性、应用商店、微服务治理、边缘计算、存储” 等特性,更进一步完善交互设计,并全面提升了用户体验。

并且,v3.3.0 得到了来自青云科技之外的更多企业与用户的贡献和参与,无论是功能开发、功能测试、缺陷报告、需求建议、企业最佳实践,还是提供 Bug 修复、国际化翻译、文档贡献,这些来自开源社区的贡献都为 v3.3.0 的发布和推广提供了极大的帮助,我们将在文末予以特别致谢!

解读 KubeSphere 3.3.0 重大更新

更易用的 DevOps

KubeSphere DevOps 从 3.3.0 开始,后端已支持独立部署,并提供了基于 GitOps 的持续部署(Continuous Deployment, CD)方案,引入 Argo CD 作为 CD 的后端,可以实时统计持续部署的状态。

以云原生 FaaS 项目 OpenFunction 为例,假设您的 KubeSphere 集群中已经部署了 nginx-ingress 和 knative-serving,可以通过 GitOps 持续部署 OpenFunction 的其他组件。

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

Jenkins 作为一款用户基数极大、生态丰富的 CI 引擎,我们会让 Jenkins 真正地 “扮演” 引擎的角色 —— 退入幕后持续为大家提供稳定的流水线功能。之前 KubeSphere DevOps 通过轮询的方式来实现 Jenkins 流水线的数据同步,浪费了很多计算资源,本次新增了一个 Jenkins 插件,只要 Jenkins 端有相应的事件发生,就可以通过 Webhook 的形式立即将事件发送到 ks-devops。

KubeSphere DevOps 从 3.1.0 开始便内置了两个常用的流水线模板,帮助 DevOps 工程师提升 CI/CD 流水线的创建与运维效率。但内置的模板内嵌到了前端代码中,很难被改变。3.3.0 对流水线模板进行了重构,新增多款基于 CRD 的内置流水线模板,支持参数设置,用户也可以通过 CR 创建多个自定义的模板。

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

多集群与多租户

云原生技术的爆发倒逼应用的可移植性越来越高,最终会有越来越多的组织选择跨不同的云厂商或者在不同的基础设施上运行和管理多个 K8s 集群,可以说云原生的未来就是面向多集群的应用交付

KubeSphere 为用户提供了统一的控制平面,可以将应用程序及其副本分发到位于公有云和本地环境的多个集群。KubeSphere 还拥有跨多个集群的丰富可观测性,包括集中监控、日志系统、事件和审计日志等。

之前 KubeSphere 的管理权限是针对所有集群分配的,无法针对单独的集群设置权限。从 v3.3.0 开始,KubeSphere 支持分别为每个集群设置集群成员集群角色,提供了更细粒度的权限管控机制,进一步完善了 KubeSphere 的多租户系统。

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

KubeSphere 通过 CustomResourceDefinition(CRD)来定义集群,并将每个集群的信息保存在 CR 中。但 CR 只会保存在 host 集群中,member 集群中的应用无法获取自身所在集群的信息(比如集群名称),部分功能实现起来比较麻烦。比如告警管理系统发送通知时需要在通知中添加集群的标签,以标识该通知来自哪个集群,但无法自动获取,只能手动设置。

v3.3.0 解决了这个痛点,将集群名称添加到了 ConfigMap  中,因为每个集群都会有这个 ConfigMap,所以集群中的应用可以通过这个 ConfigMap 获取到自身所在的集群名称。

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

除了以上这些改进之外,还优化了多集群的管理体验,比如可以直接在 Console 界面更新每个集群的 kubeconfig 内容。

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

而且当 member 集群 kubeconfig 中的证书即将过期时会即时提醒用户,用户收到提示后可以尽快通过上述方法更新集群的 kubeconfig 内容。

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

边缘节点纳管

KubeSphere 通过与 KubeEdge 集成,解决了边缘节点纳管、边缘工作负载调度和边缘可观测性等难题,结合 KubeEdge 的边缘自治功能和 KubeSphere 的多云与多集群管理功能,可以实现云 – 边 – 端一体化管控。

v3.3.0 优化了边缘节点的管控能力,可以直接在 Console 界面登录边缘节点的终端,以便直接在边缘端进行操作,比如:

  • 下载镜像,更新边缘端应用;
  • 在边缘端更新 EdgeCore 和 Docker;
  • 修改边缘节点的机器配置;

当然,Console 界面不仅可以登录边缘节点,也可以登录普通的节点。

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

我们还将 KubeEdge 从 v1.7.2 升级到了 v1.9.2,同时移除了 EdgeWatcher 组件,因为 KubeEdge 已经提供了类似的功能。

增强可观测性

KubeSphere 提供了丰富的可视化功能,支持从基础设施到应用的多维度指标监控。此外,KubeSphere 还集成了许多常用的工具,包括多租户日志查询和收集、告警和通知等功能。

v3.3.0 新增了很多监控新特性,支持在租户级自定义监控中导入 Grafana 模板,添加了容器进程 / 线程指标,同时还优化了磁盘使用率指标,支持显示每个磁盘的使用情况。

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

现在用户也可以分别设置审计、事件、日志及 Istio 日志信息的保留时间。

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

除此之外,还对已有的监控、日志、告警等组件进行了升级:

  • Alertmanager: v0.21.0 –> v0.23.0
  • Grafana: 7.4.3 –> 8.3.3
  • kube-state-metrics: v1.9.7 –> v2.3.0
  • node-exporter: v0.18.1 –> v1.3.1
  • Prometheus: v2.26.0 –> v2.34.0
  • prometheus-operator: v0.43.2 –> v0.55.1
  • kube-rbac-proxy: v0.8.0 –> v0.11.0
  • configmap-reload: v0.3.0 –> v0.5.0
  • thanos: v0.18.0 –> v0.25.2
  • kube-events: v0.3.0 –> v0.4.0
  • fluentbit-operator: v0.11.0 –> v0.13.0
  • fluent-bit: v1.8.3 –> v1.8.11

运维友好的存储管理

持久化存储是 K8s 系统中提供数据持久化的基础组件,是实现有状态服务的重要保证。KubeSphere 从 v3.2.0 开始便在 Console 界面新增了存储管理功能,支持很多管理员级别的运维操作。v3.3.0 进一步优化了存储管理功能,管理员可以根据需要为存储类型(StorageClass)设置 PVC 自动扩展策略,当用户的 PVC 剩余容量不足时,就会按照预设的策略进行扩展。

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

为了进一步控制存储的操作权限,v3.3.0 支持了租户级别的存储权限管理,可以为存储类型(StorageClass)设置授权规则,限制用户只能在特定项目和企业空间使用存储类。

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

此前 KubeSphere Console 界面不支持对卷快照内容(VolumeSnapshotContent)和卷快照类型(VolumeSnapshotClass)进行管理,这个功能在 KubeSphere 3.3.0 得以实现,现在用户可以在 Console 界面查看上述两类资源,并对其进行编辑和删除操作。

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

服务暴露优化

目前社区有大量用户选择在物理机安装部署 K8s,并且还有大量客户是在离线的数据中心或边缘设备安装和使用 K8s 或 K3s,导致用户在私有环境对外暴露 LoadBalancer 服务比较困难。为了解决这个问题,KubeSphere 社区开源了 OpenELB,为私有化环境的用户提供了易用的 EIP 与 IP Pool 管理能力。

v3.3.0 Console 界面默认集成了对 OpenELB的支持,即使是在非公有云环境的 K8s 集群下,也可以对外暴露 LoadBalancer 服务。

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

其他更新

  • 支持通过 ClusterConfiguration 对 Istio 进行更丰富的配置;
  • 新增 K8s 审计日志开启提示;
  • 支持应用整个配置字典;
  • 支持PyCharm激活2022.1容器生命周期 hook 设置;
  • 支持流量监控统计时间配置;
  • 优化部分页面文案描述;
  • 优化了服务拓扑图详情展示窗口优化;
  • 修复了删除项目后项目网关遗留的问题;
  • 优化了 ClusterConfiguration 更新机制,无需重启 ks-apiserver、ks-controller-manager;
  • 由于政策要求暂时屏蔽了自动生成的 nip.io 路由,下一个版本中将会提供后台开关。

持续开源开放

借助于开源社区的力量,KubeSphere 迅速走向全球,目前 KubeSphere 的用户遍布全球,覆盖超过了 100 个国家和地区,下载量近百万,拥有贡献者近 300 人,主仓库在 GitHub 上 Star 数超过 10000,Fork 数超 1500。v3.3.0 Console 除了支持中、英、繁中和西班牙语之外,还支持了更多的语种,进一步拓展了海外市场。

未来 KubeSphere 团队将继续保持开源、开放的理念,v3.3.0 带来的众多优化也早已在 GitHub 开源,例如 Console、OpenELB、Fluent Operator、 KubeKey、KubeEye、Notification Manager、Kube-Events、ks-devops,相关的代码与设计文档在 GitHub 相关仓库都可以找到,欢迎大家在 GitHub 给我们 Star + Fork + PR 三连。

安装升级

KubeSphere 已将 v3.3.0 所有镜像在国内镜像仓库进行了同步与备份,国内用户下载镜像的安装体验会更加友好。关于最新的 v3.3.0 安装与升级指南,可参考 KubeSphere 官方文档。

致谢

以下是参与 KubeSphere 3.3.0 代码、文档等贡献的贡献者 GitHub ID,若此名单有遗漏请您与我们联系,排名不分先后。

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

相较于上个版本,v3.3.0 的贡献者数量增长了 50%,这也说明参与 KubeSphere 开源贡献的人越来越多了。新的贡献者,都将获得社区的专属证书,后续我们会在社区统一发放。

社区十分感谢各位贡献者的参与,也欢迎有越来越多的小伙伴加入此行列,不管是代码开发、文档优化,还是网站优化、社区宣传和技术布道,KubeSphere 社区的大门永远向您敞开!

针对近日闹得沸沸扬扬的 Apache 软件基金会项目是否受美国出口法律约束一事,Apache 软件基金会发表了《Apache 软件基金会关于非美国子公司已添加到美国联邦登记公告实体清单裁决中的声明》一文。

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

文中指出,出口和再出口对实体清单上指定的各方的限制仅适用于受出口管理条例(EAR)约束的活动和交易。由美国商务部、工业和安全局(BIS)于 2016 年 9 月 20 日生效的开源公开可用加密软件源代码,被规定为是“公开可用”和“已发布”的,并且不受 EAR 约束

涉及加密软件源代码的开源项目仍然需要向 BIS 和 NSA 发送 URL 通知,以满足 EAR§742.15(b) 中的“公开可用”通知要求。

ASF(即 Apache 软件基金会)继续与 Apache 项目及其社区合作,以确保他们的通知是最新的,并在将来得到维护。

开源软件、开源代码协作、参与公开电话会议或私人会议以及提供赞助资金都是不受 EAR 约束的活动,因此不应对社区产生影响。

务必查看更加专业与详细的原文,以原文为准:

https://blogs.apache.org/foundation/entry/statement-by-the-apache-software

前言

如标题,最终查明问题是因为 mysql-connector-java:8.0.28 的一个 bug 导致的。但是在真相未浮出之前,整个问题可谓扑朔迷离,博主好久没有排查过如此得劲的 bug ,随着一层层的 debug 深入,真相也随之浮出水面。这个问题属于底层 jdbc 驱动的问题,具有普遍性,可能不知不觉中,你的应用也在线上遭受这个 bug 的摧残,所以,请耐心听我讲完这个故事,然后回去检查下你的应用状态,是否也踩坑了。喜欢直接的可以直接拉到文末结语看结果。

背景

讲故事一般先介绍人物、背景。这里也不列外,先把相关方介绍下。通常,故事情节越丰富越精彩,但是这里博主会考虑篇幅(不讲废话)会把一些与结果走向无关的细节忽略掉,力求叙述完整就好。

  • commons-db : 我们内部维护的,一个采用注解驱动的 Spring 生态下的多数据源管理组件。组件给每个 DataSource 预设了些性能优化的默认值,没有全部列出,不过包含了影响问题走向的属性(useLocalSessionState),如下:

  • java-project : 用来测试组件功能的项目,会作为和出现问题的项目做行为测试对比。spring-boot:2.5.4、mysql-connector-java:8.0.26
  • store:游戏库项目,正是这个项目发现了问题。spring-boot:2.6.6 、mysql-connector-java:8.0.28
  • 阿里云 RDS(MySQL): 阿里云 MySQL 默认的隔离级别为 READ_COMMITTED,而 MySQL 默认的隔离级别为 REPEATABLE_READ

说明: java-project 和 store 的 commons-db 版本其实不一样,因为不影响结果。这里假设他们版本一致。

问题

一天,开发反馈,在 store 项目里使用 commons-db 组件时,出现了事务回滚不生效的问题。如下图代码所示:


  • 具体表现为:执行 addUser 方法,当 1/0 抛出 RuntimeException 类型异常时,user 对象还是添加成功了。一句话总结就是,【事务回滚不生效了】。

假设

  • 假设1:曾假设过是不是 @Transactional 的 aop 没生效,导致并未开启显式事务。
  • 假设1不成立,因为在开启了 debug 日志模式后,清晰的输出了事务每个阶段的行为日志,如:

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

  • 假设2:考虑到使用了 commons-db , 如果框架层连接管理问题,导致了事务的开启、事务回滚时获取到的连接不一致,也有可能导致这个问题。
  • 假设2不成立:马上就否了,因为从上面日志上可以看到连接是同一个连接。而且不同连接执行非预期的开启、回滚事务操作应该会抛异常才是。

那么到这里,问题陷入了僵局。不禁沉思,一个看上去人畜无害的代码,一个看上去逻辑清晰的事务日志,为什么会事务回滚失效呢?????

转机

转机1

随后,我在 java-project 项目里,使用相同的 MySQL 测试了下,发现事务回滚成功了。说明这个问题仅仅影响特定的环境,而且可以通过对比两个项目的差异找到问题,离真相更近了。

转机2

开发那边又传来一个关键的信息,在 store 项目中,当设置隔离级别为 REPEATABLE_READ 时,事务回滚生效了。代码如:


到这里,然道要怀疑是隔离级别的问题么?显然是不成立的,因为对事务的认知字典里,就没出现过隔离级别影响事务回滚的字条。然后从 java-project 的测试也可以看出,在相同的 RC 隔离级别下,java-project 可以成功。

第一个解决方法

然后终归是向前进了一步了,可以临时用设置隔离级别的办法来解决【事务回滚不生效问题】。不过,不同的隔离级别,对事务锁、并发性能是不一样,这个在调整前必须要有预期。

转机3

事出反常必有妖,本着不信是隔离级别导致的问题,我在 store 项目里将  isolation 设置成 Isolation.READ_UNCOMMITTED ,发现事务回滚也生效了。这也说明了和隔离级别没有直接的关系。然后本着探究【为啥默认的 READ_COMMITTED 导致事务不生效?】的思路排查了下,发现了些问题,如下代码是事务逻辑中的一部分(源码见:DataSourceUtils.prepareConnectionForTransaction()):

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

发现,相比 RR、RU ,差别就是当隔离级别是 READ_COMMITTED 时,不会在对 session 有更新操作了。到这一步也只是多了一个明确的现象,可以解释知道真相后的行为,并没有触达真相边缘。

分析

上文整了一堆,还没发现真实问题。所以先不做其他测试了,先分析下有预期后,在针对性去验证。

先来看下普遍的正常的 Spring Transactional 完整的事务回滚的过程,普遍的指的是没有做过特殊参数配置的,一般这些参数也不会配置。

  • 1、在添加了 @Transactional 的方法执行前,会执行事务管理器(DataSourceTransactionManager)的 doBegin 方法创建一个事务,在 doBegin 方法里,会设置 autoCommit = false。会判当前隔离级别是否和用户定义的一致,否则就更新隔离级别。

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

  • 2、方法执行失败后,会执行事务管理器(DataSourceTransactionManager)的 doRollback 方法回滚事务。

从 Spring Transactional 的事务日志没看出来问题,创建事务、设置手动提交事务、回滚事务都有日志打印。那么我们就深入到驱动层、或者抓包看,是否这些指令都发到 MySQL Server 了。

定位问题 

如分析,在 store 项目中,将断点打在 mysql-connector-java 驱动的 NativeSession.execSQL()方法里,和 MySQL Server 交互的所有指令,最终都会调用这个方法执行。果然发现了问题:

  • 事务回滚失败时,事务流程并未执行 SET autocommit=0 指令。

等于说事务回滚失败时,事务一直是自动提交的模式,所以,异常回滚操作并不会回滚已经持久化了的数据。

发现这个问题后,接着定位为什么 Spring 执行了 Set autoCommit=false ,而最终确并未执行的问题,这里再次通过【转机1】的 java-project 项目做单步调试对比,发现一段关键代码(ConnectionImpl.setAutoCommit())两个项目里的代码不一致:

java-project,mysql-connector-java:8.0.26(事务回滚生效)

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

store,mysql-connector-java:8.0.28(事务回滚不生效)

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

这里稍微介绍下这个参数

  • useLocalSessionState:维护本地 sessionState ,在需要判断 【事务提交模式】、【隔离级别】设置时,获取本地状态,而不是每次像 MySQL Server 发起询问。

这个参数有助于减少和 MySQL 的交互,可以提升写数据性能。所以在参数性能优化时,被默认设置为 true 了。这里,如果 useLocalSessionState=false,则正好会掩盖这个 bug。

解密

因为在 store,mysql-connector-java:8.0.28 有问题的版本的 isAutocommit() 行为逻辑和 isAutoCommit()不一致,本该调用判断 isAutocommit 返回 true 时,却返回了 false。 最终才导致了 store 在接收到 Spring Transactional 设置 autoCommit=false 的请求时,因为 needsSetOnServer=false ,直接跳过了真正的发起 Set autocommit=0 指令的执行。导致当前事务模式是自动提交模式,所以当事务里有任何增删改操作时,会在执行完后立马 commit 持久化。这时如果异常而发起事务 rollback ,自然不会回滚之前已经自动提交的事务。这个很好的解释了开头贴出的事务日志很完整,但是事务就是回滚不生效的问题。

第二个解决方法

排查到这里,第二个解决问题的方法就出现了,只需要让判断是否需要执行 Set autocommit=0 时的 needsSetOnServer=true 成立就行了。所以,只要对 store 应用做如下两个参数任一参数配置调整,则可以解决问题了。这个方法比第一个方法要合适些:


 

解释为啥isolation 设置成 Isolation.REPEATABLE_READ 会生效

所以到这里就结束了吗?并没有,预期是即使 useLocalSessionState=ture ,事务也应该完整。然后别忘了 isAutoCommit() 和 isAutocommit() 的差异。先来看下他们的定义:


原来在  mysql-connector-java:8.0.28 驱动里,使用 statusFlags 状态代替了 autoCommit 的标识(这里先不考究为什么做这个改动),这个解释了

  • 转机2:当设置隔离级别为 REPEATABLE_READ 时,事务回滚生效了。是因为当用户定义的隔离级别 RR 和默认的 RC 不一致时,会触发 session 设置新的隔离级别,此时也会将 statusFlags = 0 更新为 statusFlags = 2. 故在调用 isAutocommit() 返回 true ,满足了执行 SET autocommit=0 指令的条件。

这里虽然知道了原因,也确切知道 isAutoCommit() != isAutocommit() ,但是为啥做如此改动确并不清楚。这里具体问题暂且不表,先来复现下问题。

复现问题

既然问题已经大差不差的定位到了,那么按常规排查流程,按预期的问题场景复现下,明确下问题边界。因为还还有可能有其他的影响因素一起导致的问题。在 java-project 项目中,做如下依赖的版本调整

  • 升级 spring-boot:2.6.6 版本和 store 保持一致:问题复现了
  • 保持 spring-boot:2.5.4,调整 mysql-connector-java:8.0.28 :问题也复现了

到这里,基本排除了 Spring  的嫌疑了。然后将矛头锁定到了 mysql-connector-java:8.0.28 身上。

确认 bug

考虑到从 mysql-connector-java:8.0.26 的 isAutoCommit 更改到了 mysql-connector-java:8.0.28 的 isAutocommit 肯定是有原因的,带着弄清楚代码作者提交这个改动的意图,去翻了下 github。

  • https://github.com/mysql/mysql-connector-j

找了下 github 的提交记录  commit ,发现,最新版本的又改回了 isAutoCommit() 了,然后 Commit Message 明确说明了这是 8.0.28 版本的 bug,如。

PyCharm激活2022.1(PyCharm 2022.1.3 发布)

至此,终于真相大白了。

修复

  • 8.0.29 release:https://dev.mysql.com/doc/relnotes/connector-j/8.0/en/news-8-0-29.html
  • A connection did not maintain the correct autocommit state when it was used in a pool with . (Bug #, Bug #)

最终解决方法

如 8.0.29 release 公告说明,已经修复了 8.0.28 在设置  的情况下,autoCommit PyCharm激活2022.1 状态设置的问题。所以,应用升级到 mysql-connector-java:8.0.29 版本即可

结语

先总结下问题表像为 Spring 【事务回滚不生效,回滚前提交的数据不会回滚】,根本原因是 【mysql-connector-java:8.0.28 版本提交的一个改动 bug ,导致在启用  的情况下,autoCommit 状态设置有问题】。

然后因为 spring-boot:2.6.3 ~ 2.6.7 ,这五个版本默认的 MySQL 驱动就是 mysql-connector-java:8.0.28 ,而  几乎是 Java JDBC DataSource 里的标配,所以这个 bug 估计会影响一大波人。然后因为只是影响回滚操作,所以这个问题会隐藏的很深,不容易察觉,所谓影响深远。

 

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/170943.html

(0)
上一篇 2024年 8月 1日 下午5:10
下一篇 2024年 8月 1日

相关推荐

关注微信