据为己有
楼主
发布于 2023-6-19 13:21:20
阅读 1527
查看全部
国外的优秀开源项目没啥好说的,支持国产,今天重点聊聊国内优秀的 Java 开源项目。在国内开源项目做得最好的莫非于阿里巴巴了,今天特地给大家整理了阿里的 11 个神级项目。最后还有一个 java 全开源的 saas 新零售小程序系统,研究微信生态的技术喜好者可以关注一下,有很多值得学习的地方。
不看会懊悔喔!
这些开源项目中的绝大多数,我都在实际工作中用过,或者有同事用过。确实挺不错,挺有价值的,如今推荐给大家。
1. Druid
Druid 自称是 Java 语言中最好的数据库连接池,它可以提供强大的监控和扩展功能。监控后台如下图所示:
Druid 的主要优点如下:
它能监控数据库访问性能。 它提供了 WallFilter,它是基于 SQL 语义分析来实现防御 SQL 注入攻击的。 它提供了多种监测连接泄漏的手腕。 它提供了数据库密码加密的功能。 它能打印 SQL 执行日志。
github 地址: https://github.com/alibaba/druid maven 中央仓库: https://mvnrepository.com/artifact/com.alibaba/druid 配置 maven 依赖:<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${druid-version}</version> </dependency> 复制代码 2. fastjson
fastjson 是阿里巴巴的开源 JSON 解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean。
fastjson 的主要优点如下:
速度快,fastjson 相对其他 JSON 库的特点是快,从 2011 年 fastjson 发布 1.1.x 版本之后,其性能从未被其他 Java 实现的 JSON 库超越。 使用广泛,fastjson 在阿里巴巴大规模使用,在数万台效劳器上部署,fastjson 在业界被广泛接受。在 2012 年被开源中国评选为最受欢送的国产开源软件 之一。 使用简单,fastjson 的 API 非常简洁。
//序列化 String text = JSON.toJSONString(obj); //反序列化 VO vo = JSON.parseObject("{...}", VO.class); 复制代码 功能完备,支持泛型,支持流处置超大文本,支持枚举,支持序列化和反序列化扩展。
github 地址: https://github.com/alibaba/fastjson maven 中央仓库: https://mvnrepository.com/artifact/com.alibaba/fastjson 配置 maven 依赖:<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.76</version> </dependency> 复制代码 3. Dubbo
Apache Dubbo 是一款微效劳开发框架,它提供了 RPC 通信 与 微效劳治理 两大关键才干。这意味着,使用 Dubbo 开发的微效劳,将具备互相之间的远程发现与通信才干, 同时利用 Dubbo 提供的丰富效劳治理才干,可以实现诸如效劳发现、负载平衡、流量调度等效劳治理诉求。
同时 Dubbo 是高度可扩展的,用户几乎可以在任意功能点去定制自己的实现,以改变框架的默认行为来满足自己的业务需求。它目前已交给 Apache 管理和维护。
架构图如下:
Dubbo 的主要优点如下:
基于透明接口的 RPC 智能负载平衡 自动效劳注册和发现 高扩展性 运行时流量路由 可视化效劳治理 云原生友好
github 地址: https://github.com/apache/dubbo maven 中央仓库: https://mvnrepository.com/artifact/com.alibaba/dubbo/ 配置 maven 依赖:<properties> <dubbo.version>3.0.3</dubbo.version> </properties> <dependencies> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>${dubbo.version}</version> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-dependencies-zookeeper</artifactId> <version>${dubbo.version}</version> <type>pom</type> </dependency> </dependencies> 复制代码 4. Rocketmq
Apache RocketMQ 是一个分布式消息和流媒体平台,具有低延迟、高性能和可靠性、万亿级容量和灵敏的可扩展性。
它提供了多种功能:
消息传送形式,包括发布 / 订阅、恳求 / 回复和流媒体 金融级交易消息 基于 DLedger 的内置容错和高可用配置选项 多种跨语言客户端,如 Java、C/C++、Python、Go 可插拔传输协议,例如 TCP、SSL、AIO 内置消息追踪才干,也支持 opentracing多功能大数据和流媒体生态系统集成 按时间或偏移量的消息追溯 可靠的 FIFO 和同一队列中的严格有序消息传送 高效的拉推式消费形式 单个队列百万级消息累积才干 多种消息传送协议,如 JMS 和 OpenMessaging 灵敏的分布式横向扩展部署架构 闪电般的批量消息交换系统 各种消息过滤机制,例如 SQL 和 Tag 用于隔离测试和云隔离集群的 Docker 镜像 用于配置、指标和监控的功能丰富的管理仪表板 认证和受权 免费的开源连接器,用于源和接收器
rocketmq 后台管理界面:
github 地址: https://github.com/apache/rocketmq maven 中央仓库: https://mvnrepository.com/artifact/org.apache.rocketmq/rocketmq-spring-boot-starter rocketmq 包含:效劳端和客户端,在我们的项目中主要关注客户端的代码即可。
配置 maven 依赖:<dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>4.3.0</version> </dependency> 复制代码 5. Arthas
Arthas 是 Alibaba 开源的 Java 诊断工具,深受开发者喜欢。
当你遇到以下类似问题而束手无策时,Arthas 可以协助你处置:
这个类从哪个 jar 包加载的?为什么会报各品种相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 线上遇到某个用户的数据处置有问题,但线上同样无法 debug,线下无法重现! 是否有一个全局视角来查看系统的运行情况? 有什么办法可以监控到 JVM 的实时运行状态? 怎么快速定位应用的热点,生成火焰图? 怎样直接从 JVM 内查找某个类的实例?
分析代码消耗时间:
Arthas 支持 JDK 6+,可以运行在多种操作系统上,比如:Linux/Mac/Windows,采用命令行交互形式,同时提供丰富的 Tab 自动补全功能,进一步方便停止问题的定位和诊断。
github 地址: https://alibaba.github.io/arthas/ maven 中央仓库: https://mvnrepository.com/artifact/com.taobao.arthas/arthas-spring-boot-starter 在目的机器执行如下命令即可启动 arthas:curl -O https://arthas.aliyun.com/arthas-boot.jar java -jar arthas-boot.jar 复制代码 6. Nacos
Nacos 是一个易于使用的平台,专为动态效劳发现和配置以及效劳管理而设计。它可以协助您轻松构建云原生应用程序和微效劳平台。
效劳是 Nacos 的一等公民。Nacos 支持几乎所有类型的效劳,例如 Dubbo/gRPC 效劳、Spring Cloud RESTFul 效劳或 Kubernetes 效劳。
Nacos 提供了四大功能。
效劳发现和效劳安康检查。Nacos 使效劳通过 DNS 或 HTTP 接口注册自己和发现其他效劳变得简单。Nacos 还提供效劳的实时安康检查,以防止向不安康的主机或效劳实例发送恳求。 动态配置管理。动态配置效劳允许您在所有环境中以集中和动态的方式管理所有效劳的配置。Nacos 无需在更新配置时重新部署应用程序和效劳,这使得配置更改更加高效和敏捷。 动态 DNS 效劳。Nacos 支持加权路由,让您更容易在数据中心内的消费环境中实现中层负载平衡、灵敏的路由战略、流量控制和简单的 DNS 解析效劳。它可以协助您轻松实现基于 DNS 的效劳发现,并防止应用程序耦合到特定于供给商的效劳发现 API。 效劳和元数据管理。Nacos 提供了一个易于使用的效劳仪表板,协助您管理您的效劳元数据、配置、kubernetes DNS、效劳安康和指标统计。
Nacos 地图:
Nacos 生态图:
github 地址: https://github.com/alibaba/nacos maven 中央仓库: https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery 7. easyExcel
Java 解析、生成 Excel 比较有名的框架有 Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi 有一套 SAX 形式的 API 可以一定水平的处置一些内存溢出的问题,但 POI 还是有一些缺陷,比如 07 版 Excel 解压缩以及解压后存储都是在内存中完成的,内存消耗仍然很大。
easyexcel 重写了 poi 对 07 版 Excel 的解析,一个 3M 的 excel 用 POI sax 解析仍然需要 100M 左右内存,改用 easyexcel 可以降低到几 M,并且再大的 excel 也不会呈现内存溢出;03 版依赖 POI 的 sax 形式,在上层做了模型转换的封装,让使用者更加简双方便。
64M 内存 1 分钟内读取 75M (46W 行 25 列) 的 Excel
github 地址: https://github.com/alibaba/easyexcel maven 中央仓库: https://mvnrepository.com/artifact/com.alibaba/easyexcel 配置 maven 依赖:<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.6</version> </dependency> 复制代码 8. Sentinel
随着分布式系统变得越来越流行,效劳之间的可靠性变得比以往任何时候都更加重要。
Sentinel 以 “流量” 为切入点,在流量控制、 流量整形、熔断、系统自适应维护等多个领域开展工作,保证微效劳的可靠性和弹性。
Sentinel 具有以下特点:
丰富的适用场景:Sentinel 在阿里巴巴得到了广泛的应用,几乎覆盖了近 10 年双 11(11.11)购物节的所有核心场景,比如需要限制突发流量的 “秒杀” 满足系统容量、消息削峰填谷、下游不可靠业务断路、集群流量控制等。 实时监控:Sentinel 还提供实时监控才干。可以实时查看单台机器的运行时信息,以及 500 个节点以下集群的运行时信息汇总。 广泛的开源生态系统:Sentinel 提供与 Spring Cloud、Dubbo 和 gRPC 等常用框架和库的开箱即用集成。您只需将适配器依赖项添加到您的效劳即可轻松使用 Sentinel。 多语言支持:Sentinel 为 Java、Go 和 C++ 提供了本机支持。 丰富的 SPI 扩展:Sentinel 提供简单易用的 SPI 扩展接口,可以让您快速自定义逻辑,例如自定义规则管理、适配数据源等。
功能概述:
生态系统景观:
github 地址: https://github.com/alibaba/Sentinel maven 中央仓库: https://mvnrepository.com/artifact/com.alibaba.csp/sentinel-core 配置 maven 依赖:<dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-core</artifactId> <version>1.8.2</version> </dependency> 复制代码 9. otter
阿里巴巴 B2B 公司,因为业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了杭州和美国异地机房的需求,同时为了提升用户体验,整个机房的架构为双 A,两边均可写,由此降生了 otter 这样一个产品。
otter 第一版本可追溯到 04~05 年,此次外部开源的版本为第 4 版,开发时间从 2011 年 7 月份不时持续到如今,目前阿里巴巴 B2B 内部的本地 / 异地机房的同步需求根本全上了 otte4。
目前同步规模:
同步数据量 6 亿 文件同步 1.5TB (2000w 张图片) 涉及 200 + 个数据库实例之间的同步 80 + 台机器的集群规模
otter 能处置什么?
异构库同步。mysql -> mysql/oracle. (目前开源版本只支持 mysql 增量,目的库可以是 mysql 或者 oracle,取决于 canal 的功能) 单机房同步 (数据库之间 RTT < 1ms) a. 数据库版本晋级 b. 数据表迁移 c. 异步二级索引 异地机房同步 (比如阿里巴巴国际站就是杭州和美国机房的数据库同步,RTT> 200ms,亮点) a. 机房容灾 双向同步 a. 防止回环算法 (通用的处置方案,支持大部分关系型数据库) b. 数据一致性算法 (保证双 A 机房形式下,数据保证最终一致性,亮点) 文件同步站点镜像 (停止数据复制的同时,复制关联的图片,比如复制产品数据,同时复制产品图片).
工作原理图:
单机房复制示意图:
异地机房复制示意图:
github 地址: https://github.com/alibaba/otter maven 中央仓库: https://mvnrepository.com/artifact/com.alibaba.otter/canal.client 10. P3C
P3C 插件呈现了阿里巴巴 Java 编码指南,它整合了阿里巴巴集团技术团队多年来的最佳编程理论。由于我们鼓励重用和更好地理解彼此的程序,因而大量 Java 编程团队对跨项目的代码质量提出了苛刻的要求。
阿里巴巴过去见过很多编程问题。例如,有缺陷的数据库表构造和索引设计可能会导致软件架构缺陷和性能风险。另一个例子是混乱的代码构造难以维护。此外,未经身份验证的易受攻击的代码容易受到黑客的攻击。为理处置这些问题,我们为阿里巴巴的 Java 开发人员编写了这份文档。
更多信息请参考阿里巴巴 Java 编码指南:
中文版:阿里巴巴 Java 开发手册 英文版:Alibaba Java Coding Guidelines
该项目由 3 部分组成:
PMD 实现 IntelliJ IDEA 插件 Eclipse 插件
四十九条规则是基于 PMD 实现的,更多详细信息请参考 P3C-PMD 文档。IDE 插件(IDEA 和 Eclipse)中实现的四个规则如下:
[Mandatory] 制止使用已弃用的类或方法。注意:例如,应该使用 decode(String source, String encode) 而不是不推荐使用的方法 decode (String encodeStr)。一旦接口被弃用,接口提供者就有义务提供一个新的接口。同时,客户端程序员有义务检查它的新实现是什么。 [Mandatory] 来自接口或笼统类的重写方法必需用 @Override 注释标志。反例:对于 getObject () 和 get0bject (),第一个是字母 “O”,第二个是数字 “0”。为了准确判断覆盖是否胜利,需要一个 @Override 注解。同时,一旦笼统类中的方法签名发生变化,实现类将立即报告编译时错误。 [Mandatory] 静态字段或方法应直接通过其类名而不是其对应的对象名来引用。 [Mandatory] hashCode 和 equals 的用法应该遵循:
假设 equals 被覆盖,则覆盖 hashCode。 这两个方法必需为 Set 重写,因为它们用于确保不会在 Set 中插入反复的对象。 假设使用自定义对象作为 Map 的键,则必需覆盖这两个方法。注意:String 可以用作 Map 的键,因为这两个方法已经被重写。
使用 p3c 插件的效果:
最新版阿里巴巴 Java 开发手册下载地址:https://github.com/alibaba/p3c/blob/master/Java 开发手册(嵩山版).pdf
github 地址: https://github.com/alibaba/p3c/tree/master/idea-plugin 11. Spring Cloud Alibaba
Spring Cloud Alibaba 为分布式应用开发提供一站式处置方案。它包含开发分布式应用程序所需的所有组件,使您可以轻松地使用 Spring Cloud 开发应用程序。
使用 Spring Cloud Alibaba,您只需添加一些注解和少量配置,即可将 Spring Cloud 应用连接到阿里巴巴的分布式处置方案,并通过阿里巴巴中间件构建分布式应用系统。
主要功能如下:
流量控制和效劳降级:默认支持 HTTP 效劳的流量控制。您还可以使用注释自定义流量控制和效劳降级规则。规则可以动态更改。 效劳注册和发现:可以注册效劳,客户端可以使用 Spring 管理的 bean,自动集成 Ribbon 来发现实例。 分布式配置:支持分布式系统中的外化配置,配置变化时自动刷新。 事件驱动:支持构建与共享消息系统连接的高度可扩展的事件驱动微效劳。 分布式事务:支持高性能、易用的分布式事务处置方案。 阿里云对象存储:海量、安全、低本钱、高可靠的云存储效劳。支持随时随地在任何应用程序中存储和访问任何类型的数据。 阿里云 SchedulerX:精准、高可靠、高可用的定时作业调度效劳,响应时间秒级。 阿里云短信:覆盖全球的短信效劳,阿里短信提供便利、高效、智能的通讯才干,协助企业快速联络客户。
主要包含如下组件:
Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载维护等多个维度维护效劳的稳定性。 Nacos:一个更易于构建云原生应用的动态效劳发现、配置管理和效劳管理平台。 RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅效劳。 Dubbo:Apache Dubbo™ 是一款高性能 Java RPC 框架。 Seata:阿里巴巴开源产品,一个易于使用的高性能微效劳分布式事务处置方案。 Alibaba Cloud OSS: 阿里云对象存储效劳(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低本钱、高可靠的云存储效劳。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。 Alibaba Cloud SchedulerX: 阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度效劳。 Alibaba Cloud SMS: 覆盖全球的短信效劳,友好、高效、智能的互联化通讯才干,协助企业迅速搭建客户触达通道。
github 地址: https://github.com/alibaba/spring-cloud-alibaba 配置 maven 依赖:<dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.2.6.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> 复制代码 12. weiit-saas
weiit-saas 是一款 Java 开源项目,属于 weiit 团队自研产品,意在通过技术封装,让企业无需代码开发,协助企业一键生成小程序、公众号,让企业拥有独立品牌的自营商城。
基于 layui 前后端分别的企业级架构
兼容 spring cloud netflix & spring cloud alibaba
优化 Spring Security 内部实现,实现 API 调用的统一出口和权限认证受权中心
提供完善的企业微效劳流量监控,日志监控才干
提供完善的压力测试方案
提供完善的灰度发布方案
提供完善的微效劳部署方案
主要特点如下:
项目采用 Spring+SpringMVC+Mybatis 主流开源框架,遵循 MVC 架构,设计轻巧,使用简单,开发人员接手与二次开发简单易懂;项目依赖的核心支持 jar 包,核心框架 weiit-frame 也都已经完全开源,下载地址见下方 Maven 仓库地址;项目完成了对阿里云、腾讯云、微信生态的快速接入与代码示例,并胜利运用到了商业中,方便大家学习对 OSS/COS/ 短信效劳 / 快递效劳 / 公众号 / 小程序 / 微信开放平台 / 微信支付 的技术点与应用场景的学习;小程序与公众号第三方受权集成,让开发者与企业省去繁琐的配置,对 AppId/AppSecret 集成彻底告别;微信支付第三方受权 集成,让开发者与企业省去繁琐的配置,让企业效劳本钱大大降低;小程序代码自动 push 与晋级 ,公众号根本常规功能(自定义菜单、图文、素材,群发 )全部接收,让企业无需登录微信官方入口,统一化管理企业信息与数据;微信消息通知与模板 自动同步与管理,让企业场景交融无障碍;自定义装修功能 ,实现企业电商场景多元化,处置不同行业不同模板,让企业需求得到真正处置;丰富的营销工具 ,处置企业微营销需求,并集中化管理。拼团活动、积分活动、砍价,优惠券,卡券,礼品卡,邀请有礼等营销活动,方便二次开发;不同企业数据隔离,真正实现 SAAS 数据隔离模型,让企业数据互不干扰。不同企业不同域名自动分配,让企业小程序、公众号前端隔离,防止因为公众号或者小程序推广时导致域名被检测导致的封号问题呈现,即不同企业不同域,意在防止 saas 平台中的企业受到其他企业的影响。
gitee 地址: weiit-saas: 是一款Java开源项目,属于weiit团队自研产品,意在通过技术封装,让企业无需代码开发,协助企业一键生成小程序、公众号,让企业拥有独立品牌的自营商城。 好了,今天的分享就到这里,喜欢研究技术的朋友赶紧行动起来吧!