一切福田,不離方寸,從心而覓,感無不通。

Category Archives: Java

阿里巴巴10个顶级开源项目,确定不来看看?

一、创作由来 Hello 大家好,我是l拉不拉米,今天给大家分享10个阿里巴巴开源的顶级项目,都是Java开发必备利器。 这10个项目均来自Github上阿里巴巴公开的开源项目。 都是java3c在工作中用过或者之前学习过的项目,也有写过个别项目的文章,但是从没有整理到一起过。周末花了大概半天的时间,一一整理出来,方便大家阅读学习。 阿里巴巴的github地址 二、项目介绍 1、arthas 截至目前,github上有27.4k个星和6k的fork,是阿里巴巴最受欢迎的开源项目。 Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现! 是否有一个全局视角来查看系统的运行状况? 有什么办法可以监控到JVM的实时运行状态? 怎么快速定位应用的热点,生成火焰图? 怎样直接从JVM内查找某个类的实例? Arthas 提供管理界面在线排查问题,无需重启;动态跟踪Java代码;实时监控JVM状态。 Arthas 支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。 Github: github.com/alibaba/art… 文档: arthas.aliyun.com/doc/ 超过120家公司登记了使用: 2、p3c p3c是阿里巴巴开发的Java规约检查插件,可以继承到idea和eclipse中。 相信不少搞Java开发的同学都了解过阿里巴巴出品《Java开发手册》,主要整理了阿里内部使用的Java开发的规范。 p3c插件实现了开发手册中的的53条规则,大部分基于PMD实现,其中有4条规则基于IDEA实现,并且基于IDEA Inspection实现了实时检测功能。部分规则实现了Quick Fix功能(快速修复)。 目前插件检测有两种模式:实时检测、手动触发。 主要功能一览: 3、druid Druid 是一个 JDBC 组件库,与c3p0、dbcp齐名,包含数据库连接池、SQL Parser 等组件,被大量业务和技术产品使用或集成,经历过最严苛线上业务场景考验。 Druid连接池 Druid连接池是阿里巴巴开源的数据库连接池项目。Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能。功能强大,能防SQL注入,内置Loging能诊断Hack应用行为。 Github项目地址 github.com/alibaba/dru… 文档 github.com/alibaba/dru… 下载 repo1.maven.org/maven2/com/… 监控DEMO http://120.26.192.168/druid/index.html 竞品对比 4、fastjson fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。 fastjson的优点 1、速度快 fastjson相对其他JSON库的特点是快,从2011年fastjson发布1.1.x版本之后,其性能从未被其他Java实现的JSON库超越。 2、使用广泛 fastjson在阿里巴巴大规模使用,在数万台服务器上部署,fastjson在业界被广泛接受。在2012年被开源中国评选为最受欢迎的国产开源软件之一。 3、测试完备 fastjson有非常多的testcase,在1.2.11版本中,testcase超过3321个。每次发布都会进行回归测试,保证质量稳定。 4、使用简单 fastjson的API十分简洁。

5、easyexcel EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百万行级别的Excel。 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 还有极速模式能更快,但是内存占用会在100M多一点。 6、canal 阿里巴巴 MySQL binlog […]

龙生   20 Oct 2021
View Details

springboot整合mongodb,并配置账户名和密码登录验证

springboot pom.xml加入依赖

application.yml加入连接信息 mapper编写

Application启动添加注解

application.yml配置,这里之前碰到一个坑,mongodb的配置没有写host和port属性,只写了database和uri,这种方式在无密码验证的情况下,可以连接mongodb。但是在mongodb设置了密码登录后,就无法连接,一直提示 Caused by: com.mongodb.MongoCommandException: Command failed with error 13: 'not authorized on wxsb_dev to execute command { insert 这里我们说下,application.yml关于mongodb的两种配置 第一种,yml方式,注意这里的host port username password database,每个属性都要配置。

  第二种,uri方式

  之前就是配了如下的参数,导致一直出错,还以为是mongodb的用户权限配置出错导致,原来是配置文件出错,报错信息 Caused by: com.mongodb.MongoCommandException: Command failed with error 13: 'not authorized on wxsb_dev to execute command { insert

  from:https://www.it610.com/article/1283088113266081792.htm

龙生   18 Oct 2021
View Details

这个开源组织里的项目都是精品

前言 在开源中国里,不知道大家有没有留意到一个Java开源组织——Dromara? 这个组织是由Apache ShenYu(前身是Soul网关)的作者创立,多位Java开源作者参与的一个Java开源组织。 在开源中国社区,很多Java开源作者都是各自为战,独立运营项目。Domara组织的诞生就是为了联合Java开源的力量,共建社区,资源共享,共同推行中国Java开源事业的发展。 目前Dromara社区拥有9个GVP项目,和一些Star数量很高的项目。这些开源项目社区都很活跃,每一个都是能提高工作效率的精品开源作品。下面就来盘点下Dromara组织其中的4个开源项目。都是非常实用的工具,用好这些将会让你的生产效率大大提升! Sa-Token 首先我要介绍的是Sa-Token,可能是史上功能最全的轻量级 Java 权限认证框架。 简单的使用方式,丰富的特性,强大的功能,你有什么理由拒绝? 官方网站:sa-token.dev33.cn/ Gitee托管仓库:gitee.com/dromara/sa-… Github托管仓库:github.com/dromara/Sa-… Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、Session会话、单点登录、OAuth2.0、微服务网关鉴权 等一系列权限相关问题。 Sa-Token 的 API 设计非常简单,有多简单呢?以登录认证为例,你只需要:

  至此,我们已经借助 Sa-Token 完成登录认证! 此时的你小脑袋可能飘满了问号,就这么简单?自定义 Realm 呢?全局过滤器呢?我不用写各种配置文件吗? 没错,在 Sa-Token 中,登录认证就是如此简单,不需要任何的复杂前置工作,只需这一行简单的API调用,就可以完成会话登录认证! 当你受够 Shiro、SpringSecurity 等框架的三拜九叩之后,你就会明白,相对于这些传统老牌框架,Sa-Token 的 API 设计是多么的简单、优雅! 权限认证示例(只有具备 user:add 权限的会话才可以进入请求)

  将某个账号踢下线(待到对方再次访问系统时会抛出NotLoginException异常)

  在 Sa-Token 中,绝大多数功能都可以 一行代码 完成:

  即使不运行测试,相信您也能意会到绝大多数 API 的用法。 想要了解更多请参考:gitee.com/dromara/sa-… Forest 一款极大程度解放你的Http接入工作的强大Http客户端框架。 Http协议很复杂吗?那是因为你还没有使用过Forest,虽然业内有很多其他优秀的Http客户端,但是你错过了Forest,将会错过一大片优雅美丽的森林。 官方网站:forest.dtflyx.com Gitee托管仓库:gitee.com/dromara/for… Github托管仓库:github.com/dromara/for… Forest 是一个开源的 Java HTTP 客户端框架,用来访问第三方服务 RESTful 接口。 它能够将 HTTP 的请求参数绑定到 Java 接口上,之后调用 Java 接口就等于在发送 HTTP 请求。一切面向于接口。 很多公司需要在 Java 后台调用许多第三方 HTTP 接口,比如微信支付、友盟等等第三方平台。 公司内部还有很多服务是用世界最好语言写的,接口自然也只能通过 HTTP […]

龙生   13 Oct 2021
View Details

横空出世!IDEA画图神器来了,比Visio快10倍!

程序员在工作中,经常会有绘制时序图、流程图的需求,尤其是在写文档的时候。平时我们会选择ProcessOn这类工具来绘制,但有时候用代码来画图可能会更高效一点,毕竟没有比程序员更熟悉代码的了。今天给大家推荐一款画图工具PlantUML,可以配合IDEA使用,画图更高效! SpringBoot实战电商项目mall(50k+star)地址:github.com/macrozheng/… PlantUML简介 PlantUML是一款开源的UML图绘制工具,支持通过文本来生成图形,使用起来非常高效。可以支持时序图、类图、对象图、活动图、思维导图等图形的绘制。 下面使用PlantUML来绘制一张流程图,可以实时预览,速度也很快! 安装 通过在IDEA中安装插件来使用PlantUML无疑是最方便的,接下来我们来安装下IDEA的PlantUML插件。 首先在IDEA的插件市场中搜索PlantUML,安装这个排名第一的插件; 有时候网络不好的话可能下载不下来,可以点击Plguin homepage按钮访问插件主页,然后选择合适的版本下载压缩包; 下载成功后,选择从本地安装即可。 使用 接下来我们使用PlantUML插件分别绘制时序图、用例图、类图、活动图、思维导图,来体验下PlantUML是不是真的好用! 时序图 时序图(Sequence Diagram),是一种UML交互图。它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。我们在学习Oauth2的时候,第一步就是要搞懂Oauth2的流程,这时候有个时序图帮助可就大了。下面我们使用PlantUML来绘制Oauth2中使用授权码模式颁发令牌的时序图。 首先我们需要新建一个PlantUML文件,选择时序图; 我们可以通过PlantUML提供的语法来生成Oauth2的时序图,语法还是非常简单的,具体内容如下;

该代码将生成如下时序图,用写代码的方式来画时序图,是不是够炫酷; 本时序图关键说明如下: title可以用于指定UML图的标题; 通过actor可以声明人形的参与者; 通过participant可以声明普通类型的参与者; 通过as可以给参与者取别名; 通过->可以绘制参与者之间的关系,虚线箭头可以使用-->; 在每个参与者关系后面,可以使用:给关系添加说明; 通过autonumber我们可以给参与者关系自动添加序号; 通过activate和deactivate可以指定参与者的生命线。 这里还有个比较神奇的功能,当我们右键时序图时,可以生成一个在线访问的链接; 直接访问这个链接,可以在线访问UML时序图,并进行编辑,是不是很酷! 用例图 用例图(Usecase Diagram)是用户与系统交互的最简表示形式,展现了用户和与他相关的用例之间的关系。通过用例图,我们可以很方便地表示出系统中各个角色与用例之间的关系,下面我们用PlantUML来画个用例图。 首先我们需要新建一个PlantUML文件,选择用例图,该用例图用于表示顾客、主厨、美食家与餐馆中各个用例之间的关系,具体内容如下;

该代码将生成如下用例图; 本用例图关键说明如下: left to right direction表示按从左到右的顺序绘制用例图,默认是从上到下; 通过package可以对角色和用例进行分组; 通过actor可以定义用户; 通过usecase可以定义用例; 角色和用例之间的关系可以使用-->来表示。 类图 类图(Class Diagram)可以表示类的静态结构,比如类中包含的属性和方法,还有类的继承结构。下面我们用PlantUML来画个类图。 首先我们需要新建一个PlantUML文件,选择类图,该图用于表示Person、Student、Teacher类的结构,具体内容如下;

该代码将生成如下类图,看下代码和类图,是不是发现和我们用代码定义类还挺像的; 本类图关键说明如下: 通过class可以定义类; 通过在属性和方法左边加符号可以定义可见性,-表示private,#表示protected,+表示public; 通过<|--表示类之间的继承关系。 活动图 活动图(Activity Diagram)是我们用的比较多的UML图,经常用于表示业务流程,比如电商中的下单流程就可以用它来表示。下面我们用PlantUML来画个活动图。 首先我们需要新建一个PlantUML文件,选择活动图,这里使用了mall项目中购物车中生成确认单的流程,具体内容如下;

该代码将生成如下活动图,在活动图中我们既可以用if else,又可以使用switch,甚至还可以使用while循环,功能还是挺强大的; 本活动图关键说明如下: 通过start和stop可以表示流程的开始和结束; 通过:和;中间添加文字来定义活动流程节点; 通过if+then+endif定义条件判断; 通过switch+case+endswitch定义switch判断。 思维导图 思维导图(Mind Map),是表达发散性思维的有效图形工具,它简单却又很有效,是一种实用性的思维工具。之前在我的mall学习教程中就有很多地方用到了,下面我们用PlantUML来画个思维导图。 首先我们需要新建一个PlantUML文件,选择思维导图,这里使用了mall学习路线中的大纲视图,具体内容如下;

该代码将生成如下思维导图,其实使用PlantUML我们可以自己定义图形的样式,这里我自定义了下颜色; 本思维导图关键说明如下: 通过+和-可以表示思维导图中的节点,具有方向性; 通过[#颜色]可以定义节点的边框颜色; 通过_可以去除节点的边框; 总结 虽然目前可以绘制UML图的图形化工具很多,但是对于程序员来说,使用代码来绘图可能更直接,效率更高,尤其是配合IDEA使用。如果你想使用代码来绘图,不妨尝试下PlantUML吧。 参考资料 官方文档:plantuml.com/zh/ 作者:MacroZheng 链接:https://juejin.cn/post/7017988314053492767 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

龙生   13 Oct 2021
View Details

Gradle(一)安装配置

Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。面向Java应用为主。当前其支持的语言限于Java、Groovy、Kotlin和Scala。 到此不得不说另一个很火的工具maven,众所周知,maven的两大作用: ①:管理jar包 ②:构建项目 使用maven的缺点,XML配置文件的繁琐,特别是项目较大时,pom.xml配置眼花缭乱。 Gradle在maven的基础上,简化了配置文件,自动搜索Gradle等,使得我们创建管理项目更加简单。   一、下载,Gradle是压缩文件,下载解压即可。https://gradle.org/releases/ 这个是发布版,当然你还可以去 https://services.gradle.org/ 下载更新的版本。本人下载5.2.1的发布版 https://gradle.org/next-steps/?version=5.2.1&format=all 下载完毕后在本地目录解压即可。   二、配置环境变量:GRADLE_HOME 变量值为Gradle文件解压的实际路径,本文为例:E:\Gradle\gradle-5.2.1-all\gradle-5.2.1 在系统变量 path中加入:%GRADLE_HOME%\bin; 在cmd输入gradle -v验证是否安装成功   三、配置Gradle使用maven本地仓库,这样Gradle就不会重新下载已经存在maven本地仓库的jar包,从而节省时间和空间。 在环境变量中加入新的系统变量:GRADLE_USER_HOME  变量值是maven本地仓库的路径,本文为例C:\Users\Administrator\.m2\repository 此时,Gradle下载的文件将放到指定的仓库路径中。但是还需要修改build.gradle文件中加入mavenLocal() 引用本地仓库 repositories { //repositories闭包 mavenLocal() //配置先从本地仓库寻找jar包,优先寻找上一个配置,找到不执行下面的配置 mavenCentral() //配置从中央仓库寻找 google() //第三方仓库 jcenter() //代码托管库:设置之后可以在项目中轻松引用jcenter上的开源项目 }   from:https://www.cnblogs.com/zeussbook/p/10556025.html

龙生   03 Sep 2021
View Details

Maven安装与配置

一、需要准备的东西

1. JDK

2. Eclipse

3. Maven程序包

龙生   02 Sep 2021
View Details

开发人员正从 Java 8 向 Java 11 转移

此前的 Java 社区报告曾指出,Java 8 仍是开发人员使用的主要版本,新版本并未“得宠”。但 Snyk 近期发布的  JVM Ecosystem Report 2021 则指出,开发人员已经逐渐从 Java 8 迁移到了 Java 11。 JVM Ecosystem Report 2021 展示了关于 JVM 生态系统状态的最大年度调查的结果。该调查在 2021 年 2 月和 3 月的六周时间里进行,收集了来自 2000 多名 Java 开发者的回复。 调查结果显示,有 44.1% 的受访者在生产中使用免费的 AdoptOpenJDK 发行版。但 Oracle 仍然是市场上的重要参与者,其 OpenJDK 构建占 28%,商业 Oracle JDK 占 23%。 40% 的调查参与者在生产中使用了一个以上的 Java 版本。升级到 8 版本以上的人也比预料的要多。目前,有 61.5% 的人在生产中使用 Java 11,近 12% 的人使用最新版本,即调查期间的 Java 15。 Snyk 方面在报告中指出,这表明开发人员确实将他们的 Java 版本升级到了 Java 8 以上的版本,有关大多数 Java 开发人员都乐于使用 Java 8 的现象似乎正在慢慢瓦解。不过值得注意的是,仍有一半的 Java 11 用户(目前使用最多的版本)在他们的生产堆栈中使用 Java 8。 从长远来看,虽然 JVM 语言的种类在过去几年中有所增长,但 Java 仍然是最受欢迎的语言。超过 90% 的开发者使用 Java;Kotlin 次之,为 17.7%。 而 JetBrains IntelliJ IDEA […]

龙生   08 Jul 2021
View Details

java.security.egd

SecureRandom在java各种组件中使用广泛,可以可靠的产生随机数。但在大量产生随机数的场景下,性能会较低。这时可以使用"-Djava.security.egd=file:/dev/./urandom"加快随机数产生过程。 以产生uuid的时候使用nextBytes产生随机数为入口,xSecureRandom的代码逻辑。

使用了SecureRandom.next*的方法。 在使用SecureRandom产生下一个随机数的时候调用nextLong或者nextBytes,最终会调用SecureRandom的nextBytes。

而nextBytes是一个同步的方法,在多线程使用时,可能会产生性能瓶颈。

  secureRandomSpi被初始化为sun.security.provider.SecureRandom secureRandomSpi是SecureRandom.NativePRNG的一个实例。 使用jvm参数-Djava.security.debug=all ,可以打印securityprovider列表,从中可以看出,SecureRandom.NativePRNG由sun.security.provider.NativePRNG提供服务。 Provider: Set SUN provider property[SecureRandom.NativePRNG/sun.security.provider.NativePRNG]   分析openjdk的源码,NativePRNG.engineNextBytes调用了NativePRNG.RandomIO.ensureBufferValid,而ensureBufferValid直接从urandom读取数据:

  通过测试可以发现,hotspot需要使用配置项"-Djava.security.egd=file:/dev/./urandom"才能从urandom读取数据,这里openjdk做了优化,直接从urandom读取数据。 /dev/random在产生大量随机数的时候比/dev/urandom慢,所以,建议在大量使用随机数的时候,将随机数发生器指定为/dev/./urandom。   转自:https://blog.51cto.com/leo01/1795447   from:https://blog.csdn.net/wangooo/article/details/109139129

龙生   01 Jul 2021
View Details

如何用Docker打包Springboot的四种方式

一:最基本的Dockerfile构建Springboot项目 在pom同目录下新建Dockerfile

  将Springboot使用Maven打包,在终端中传参进去,进行构建Images。

  给Springboot启动时候传环境变量或者shell参数

  指定JVM参数和shell参数

  二:使用Idea可视化管理docker, 构建Springboot容器 这个在我另外一篇文章有讲到,都比较简单,有啥问题请留言。 三:使用Maven插件自动化构建Image https://github.com/spotify/dockerfile-maven ,能力强的可以直接去看README.md。 简单介绍一下这个插件做啥用的 通过pom配置docker构建Image过程,参数等 。 封装了自动化build,push,run等Maven命令 。 * 需要依赖Dockerfile,Dockerfile与pom.xml位于同一个目录下。 在pom.xml同目录下创建Dockerfile

  在pom中添加

  最后在Idea Maven插件Plugins点击docker:build即可。或者输入命令

  四:使用Google的Maven插件进行容器管理(重头戏) Google开源项目Jib,对比上面那个插件Jib的Start数为7.8k,dockerfile-maven 为2.4k。 maven 插件

  配置maven docker hub账户和密码,在maven settings.xml中添加

  在idea maven插件中点击或者maven命令 mvn compile jib:buildTar 可以看到推送远程成功,Jib不需要写Dockerfile只需要你在插件中定义构建类型,所以使用时请多参考github的文档。最后现在也有这种开源的容器云平台,可以去了解下。   from:https://zhuanlan.zhihu.com/p/89161347

龙生   01 Jul 2021
View Details
1 26 27 28 62