国外的优秀开源项目没啥好说的,支持国产,今天重点聊聊国内优秀的 Java 开源项目。在国内开源项目做得最好的莫非于阿里巴巴了,今天特地给大家整理了阿里的 11 个神级项目。最后还有一个 java 全开源的 saas 新零售小程序系统,研究微信生态的技术爱好者可以关注一下,有很多值得学习的地方。
不看会后悔喔!
这些开源项目中的绝大多数,我都在实际工作中用过,或者有同事用过。确实挺不错,挺有价值的,现在推荐给大家。
Druid 自称是 Java 语言中最好的数据库连接池,它能够提供强大的监控和扩展功能。监控后台如下图所示:

Druid 的主要优点如下:
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>
fastjson 是阿里巴巴的开源 JSON 解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean。
fastjson 的主要优点如下:
//序列化
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>
Apache Dubbo 是一款微服务开发框架,它提供了 RPC 通信 与 微服务治理 两大关键能力。这意味着,使用 Dubbo 开发的微服务,将具备相互之间的远程发现与通信能力, 同时利用 Dubbo 提供的丰富服务治理能力,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。
同时 Dubbo 是高度可扩展的,用户几乎可以在任意功能点去定制自己的实现,以改变框架的默认行为来满足自己的业务需求。它目前已交给 Apache 管理和维护。
架构图如下:

Dubbo 的主要优点如下:
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>
Apache RocketMQ 是一个分布式消息和流媒体平台,具有低延迟、高性能和可靠性、万亿级容量和灵活的可扩展性。
它提供了多种功能:
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>
Arthas 是 Alibaba 开源的 Java 诊断工具,深受开发者喜爱。
当你遇到以下类似问题而束手无策时,Arthas 可以帮助你解决:
分析代码消耗时间:

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
Nacos 是一个易于使用的平台,专为动态服务发现和配置以及服务管理而设计。它可以帮助您轻松构建云原生应用程序和微服务平台。
服务是 Nacos 的一等公民。Nacos 支持几乎所有类型的服务,例如 Dubbo/gRPC 服务、Spring Cloud RESTFul 服务或 Kubernetes 服务。
Nacos 提供了四大功能。
Nacos 地图:

Nacos 生态图:

github 地址: https://github.com/alibaba/nacos maven 中央仓库: https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery
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>
随着分布式系统变得越来越流行,服务之间的可靠性变得比以往任何时候都更加重要。
Sentinel 以 “流量” 为切入点,在流量控制、 流量整形、熔断、系统自适应保护等多个领域开展工作,保障微服务的可靠性和弹性。
Sentinel 具有以下特点:
功能概述:

生态系统景观:

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>
阿里巴巴 B2B 公司,因为业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了杭州和美国异地机房的需求,同时为了提升用户体验,整个机房的架构为双 A,两边均可写,由此诞生了 otter 这样一个产品。
otter 第一版本可追溯到 04~05 年,此次外部开源的版本为第 4 版,开发时间从 2011 年 7 月份一直持续到现在,目前阿里巴巴 B2B 内部的本地 / 异地机房的同步需求基本全上了 otte4。
目前同步规模:
otter 能解决什么?
工作原理图:

单机房复制示意图:

异地机房复制示意图:

github 地址: https://github.com/alibaba/otter maven 中央仓库: https://mvnrepository.com/artifact/com.alibaba.otter/canal.client
P3C 插件呈现了阿里巴巴 Java 编码指南,它整合了阿里巴巴集团技术团队多年来的最佳编程实践。由于我们鼓励重用和更好地理解彼此的程序,因此大量 Java 编程团队对跨项目的代码质量提出了苛刻的要求。
阿里巴巴过去见过很多编程问题。例如,有缺陷的数据库表结构和索引设计可能会导致软件架构缺陷和性能风险。另一个例子是混乱的代码结构难以维护。此外,未经身份验证的易受攻击的代码容易受到黑客的攻击。为了解决这些问题,我们为阿里巴巴的 Java 开发人员编写了这份文档。
更多信息请参考阿里巴巴 Java 编码指南:
该项目由 3 部分组成:
四十九条规则是基于 PMD 实现的,更多详细信息请参考 P3C-PMD 文档。IDE 插件(IDEA 和 Eclipse)中实现的四个规则如下:
使用 p3c 插件的效果:

最新版阿里巴巴 Java 开发手册下载地址:https://github.com/alibaba/p3c/blob/master/Java 开发手册(嵩山版).pdf
github 地址: https://github.com/alibaba/p3c/tree/master/idea-plugin
Spring Cloud Alibaba 为分布式应用开发提供一站式解决方案。它包含开发分布式应用程序所需的所有组件,使您可以轻松地使用 Spring Cloud 开发应用程序。
使用 Spring Cloud Alibaba,您只需添加一些注解和少量配置,即可将 Spring Cloud 应用连接到阿里巴巴的分布式解决方案,并通过阿里巴巴中间件构建分布式应用系统。
主要功能如下:
主要包含如下组件:
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>
weiit-saas 是一款 Java 开源项目,属于 weiit 团队自研产品,意在通过技术封装,让企业无需代码开发,帮助企业一键生成小程序、公众号,让企业拥有独立品牌的自营商城。
基于 layui 前后端分离的企业级架构
兼容 spring cloud netflix & spring cloud alibaba
优化 Spring Security 内部实现,实现 API 调用的统一出口和权限认证授权中心
提供完善的企业微服务流量监控,日志监控能力
提供完善的压力测试方案
提供完善的灰度发布方案
提供完善的微服务部署方案
主要特点如下:
gitee 地址: weiit-saas: 是一款Java开源项目,属于weiit团队自研产品,意在通过技术封装,让企业无需代码开发,帮助企业一键生成小程序、公众号,让企业拥有独立品牌的自营商城。
好了,今天的分享就到这里,喜欢研究技术的朋友赶紧行动起来吧!
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘
我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/
HashMap中为什么引入红黑树,而不是AVL树呢1.概述开始学习这个知识点之前我们需要知道,在JDK1.8以及之前,针对HashMap有什么不同。JDK1.7的时候,HashMap的底层实现是数组+链表JDK1.8的时候,HashMap的底层实现是数组+链表+红黑树我们要思考一个问题,为什么要从链表转为红黑树呢。首先先让我们了解下链表有什么不好???2.链表上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)删:算法时间复杂度跟增保持一致查:既然是非线性结构,所以查询某一个节点的时候