2021

Spring Cloud Alibaba 2.2.4 已经发布,目前已可以从 maven 仓库获取,坐标如下: <dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.2.4.RELEASE</version> <type>pom</type> <scope>...

一个生活微信,一个工作微信是很多上班族的基本配置。 但由于微信客户端在PC端上只能打开一个,这使得在上班时候就非常不便,一个号在PC端上登录,一个在手机上使用,但是上班时候又不能一直看手机,不然老板还以为你在玩呢。 所以,对于打开多个微信客户端的需求就来了! 查了一下百度,有几个基本的多开方法,简单总结下大致有以下三类: 第一类:创建微信应用的副本,通过复刻多个微信应用来实现。 第二类:使用下面命令实现 open /Applications/WeChat.app/Contents/MacOS/WeChat 优化下命令,这样可以关闭终端 nohup /Applications/WeChat.app/Contents/MacOS/WeChat > /dev/null 2>&1 & 上面的两类虽然都能实现,但都不那么方便,昨天小编发现了一个更好用的工具:WeC...

2021年首发,Spring Boot 2.4.2 、2.3.8.RELEASE 两个常规错误修正版本发布。现在可以从 maven 仓库获取,坐标如下: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.2</version> <relativePath/> </parent> New Features 新增 PropertySource 资源检索 API Bug Fixes HikariDataSourceMetricsRegistry 调用 Wrapper.isWr...

你身边有没有这种顽固的Eclipse忠实用户:IDEA不能一个窗口管理多个项目!太不方便了! 对于一个窗口同时管理多个项目的需求,在我们日常开发时候是经常需要的。尤其当我们在分布式环境下,在一个窗口中调试起来就能方便很多。 如此强大的IDEA真的不支持吗?!当然不是!是你不会用! 下面我们就来说说如何在一个工作空间中管理多个项目的配置方式: 第一步:先创建一个新的空白工程 在弹出的项目名称和路径输入框中根据你的喜好输入即可。 第二步:添加模块 添加模块的方式有两种: New Module:如果你要管理的是一个新项目,那么可以通过这个选项创建一个新项目,并纳入当前的项目管理界面中。 对于我们这些Spring开发者来说,可以继续用Spring Initializr来初始化你的项目,这样创建出来的项目会成为当前这个项目的模块来管理。 Import Module:如果你要管理的项目已经...

今天碰到群里小伙伴问,线上程序好像有多个不同版本的Netty包,怎么去看到底加载了哪一个? 在说如何看之前,先来说说,当你开始意识到项目里有多个不同版本的Jar包,都是因为遇到了这几个异常: java.lang.NoSuchMethodException:自己代码中调用了某个方法,因为加载了其他版本的jar,这个版本正好没这个方法。 java.lang.NoClassDefFoundError:编译时候是好的,但是运行的时候,因为加载的jar版本问题,没有这个类。 java.lang.ClassNotFoundException:在动态加载某个Class的时候,因为要加载的jar不是正确的版本,而导致找不到这个类。 当你在本地运行ok,但到服务器上发现出现这些错误的时候,就要意识到很可能是jar冲突了(有相同依赖存在多个版本)。这个问题往往也会有这样的表现:多实例部署的时候,有的...

从个人开发角度来说,Spring Data JPA更好用,是因为开发起来更快。 但从团队角度,我们希望更好的维护性,spring data jpa就差一些,或者说对后期人的要求更高。 很容易出现这种情况: 监控系统发现某个慢查询了,运维把SQL发到开发群里,大家自查一下。此时很可能发现根本没人回应,都说没有这句SQL。然后运维定位到某个库,找到这个库的使用人,让他去看。他可能也就拿着SQL全局去搜,发现还是搜不到。 如果这个人责任心不强,可能就说 没找到这个SQL,责任心强调的,对Spring Data JPA熟悉点的,就要开始去分析这个SQL可能在哪里,然后找到对应的实现地方去修改。这就是Spring Data JPA在团队作战时候,容易引发维护成本高的真实场景。 P.S. 我开发自己独立产品的时候,还是喜欢用它的,因为自己再熟悉不过,不会有这样的场景。所以果断选择,但团队作战,...

JAVA枚举,比你想象中还要有用! 我经常发现自己在Java中使用枚举来表示某个对象的一组潜在值。 在编译时确定类型可以具有什么值的能力是一种强大的能力,它为代码提供了结构和意义。 当我第一次了解枚举时,当时我认为它们只是一个为常量命名的工具,可以很容易地被静态常量字符串ENUM_VAL_NAME所取代。 后来我发现我错了。事实证明,Java枚举具有相当高级的特性,可以使代码干净、不易出错,功能强大。 让我们一起来看看Java中的一些高级枚举特性,以及如何利用这些特性使代码更简单、更可读。 枚举是类!在Java中,枚举是Object的一个子类。让我们看看所有枚举的基类,Enum(为简洁起见进行了修改)。 public abstract class Enum<E extends Enum<E>> implements Constable, Comparab...

前言Java微服务能像Go微服务一样快吗? 这是我最近一直在思索地一个问题。 去年8月份的the Oracle Groundbreakers Tour 2020 LATAM大会上,Mark Nelson和Peter Nagy就对此做过一系列基础的的测试用以比较。接下来就给大家介绍下。 在程序员圈子里,普遍的看法是Java老、慢、无聊 ,而Go是快、新、酷 为了尽可能的进行一个相对公平的测试,他们使用了一个非常简单的微服务,没有外部依赖关系(比如数据库),代码路径非常短(只是操纵字符串),使用了小型的、轻量级的框架(Helidon for Java和Go工具包for Go),试验了不同版本的Java和不同的jvm。 对决双雄我们先来看下擂台两边的选手: 身穿深色战服的选手是JAVA Java是由被甲骨文收购的Sun Microsystems开发的。它的1.0版本是1996年发布的...

前言说到Spring,也许现在的开发者们最先想到的是 Josh Long 超快的语速与现场代码能力,让很多Java开发者折服。 然后Spring的历史上,最传奇的还是要数其创始人:Rod Johnson! 先不说别的,看到他的学历,你就震惊的了,悉尼大学的音乐学博士!不要惊讶,不是计算机! 也许就是因为这样一颗理性思维与艺术细胞结合的秃顶大佬,才能造就Spring这样的产物吧。 Rod JohnsonRod Johnson,就是上图这位头顶略微地中海的男子,但是秃脑袋瓜并没有让Rod Johnson变得难看,好几个同学一致认为这家伙长得很酷。 按照他身边的密友所描述的,Rod Johnson平日里看上去就像是一个典型的英国绅士,虽然他好像出生在澳大利亚,但是现在住在伦敦。说起话来也是一板一眼,有条有理。字正腔圆而略有点尖的口音让人听起来特别清楚。 大多数人都认为Rod Johns...

之前已经介绍了很多在Spring Boot中使用MySQL的案例,包含了Spring Boot最原始的JdbcTemplate、Spring Data JPA以及我们国内最常用的MyBatis。同时,对于一些复杂场景比如:更换Druid数据源,或是多数据源的情况也都做了介绍。 不论我们使用哪一个具体实现框架,都离不开对数据库表结构的管理。而这一类管理一直都存在一个问题:由于数据库表元数据存储于数据库中,而我们的访问逻辑都存在于Git或其他代码仓库中。Git已经帮助我们完成了代码的多版本管理,那么数据库中的表该如何做好版本控制呢? 今天我们就来介绍在Spring Boot中使用Flyway来管理数据库版本的方法。 Flyway简介Flyway是一个简单开源数据库版本控制器(约定大于配置),主要提供migrate、clean、info、validate、baseline、repair等命...

早上有个群友问了一个不错的问题:文件上传的单元测试怎么写?后面也针对后端开发要不要学一下单元测试的话题聊了聊,个人是非常建议后端开发能够学一下单元测试的。所以,今天特地拿出来写一篇说说,并不是因为这有多难写,而是作为出色的后端开发人员,单元测试如果你能考虑周到,那么从代码结构,程序质量上都会有很大的提升。而实际开发过程中,很少有开发人员会特别关注这个方面。 言归正传,下面我们具体说说当碰到需要上传文件的接口,我们要如何写单元测试! 先来回忆一下,普通接口的单元测试我们是如何写的?看看我们入门例子中的单元测试: @SpringBootTestpublic class Chapter11ApplicationTests { private MockMvc mvc; @Before public void setUp() { mvc = ...

昨天,我们介绍了如何在Spring Boot中实现文件的上传。有读者问:那么如果有多个文件要同时上传呢?这就马上奉上,当碰到多个文件要同时上传的处理方法。 动手试试本文的动手环节将基于Spring Boot中实现文件的上传一文的例子之上,所以读者可以拿上一篇的例子作为基础来进行改造,以体会这之间的区别,下面也主要讲解核心区别的地方。 第一步:修改文件上传页面的上传表单 <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" /> <title>文件上传页面 - didispace.com</title></head><body><h1>文件上传页面</h1><form method="...

文件上传的功能实现是我们做Web应用时候最为常见的应用场景,比如:实现头像的上传,Excel文件数据的导入等功能,都需要我们先实现文件的上传,然后再做图片的裁剪,excel数据的解析入库等后续操作。 今天通过这篇文章,我们就来一起学习一下如何在Spring Boot中实现文件的上传。 动手试试第一步:创建一个基础的Spring Boot项目,如果还不会的话就先看看这篇《快速入门》。 第二步:在pom.xml中引入模版引擎依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId></dependency> 你也可以选择其他你熟悉的模版...

最近PDD的瓜太火,心疼一下我们互联网人!所以,今天TJ整理了一批专注整理互联网公司相关信息的开源项目,方便大家在求职时候提前了解公司的文化,看是否适合自己,避免进去之后再后悔。 996.ICU什么是 996.ICU?工作 996,生病 ICU 这个口号是不是很熟悉?是的,这是第一个在GitHub引爆996工作制问题的项目,就连Python之父也为次发声! 该项目介绍了何为“996”工作制以及相关法律的普及。并为大家得出了这样的一个拼搏结论:按照劳动法规定,996 工作制下只有拿到当前工资的 2.275 倍,才在经济账上不吃亏。 项目官网:https://996.icu/ 仓库地址:https://github.com/996icu/996.ICU 955.WLB这是一个与996.ICU呼应的开源项目,WLB = Work Life Balance,工作与生活的平衡。 该项目主要...

现在的00后少年可能已经不太了解《暗黑破坏神2》这款由暴雪打造的经典游戏。该游戏上市的时候,国内个人家用电脑还没有那么普及,网络游戏也没有那么风靡,现在的孩子可能无法想象,那时候网吧里的很多人都是在玩这款单机游戏! 元旦逛GitHub的时候,居然发现有大神复刻了一个暗黑破坏神2,该项目名称叫:OpenDiablo2,它的Logo有没有让你回忆起以前的图标呢? 该项目目前已经收获了8.9k的Star,非常受欢迎! 仔细看看,这款复刻游戏居然是用golang编写的,对于掌握Go语言,还只是用于网络与运维应用的开发者来说,或许也是一个学习用它来做游戏的一个优秀案例。 先不说如何学了,我们一起来看看它的效果吧: 有没有找回童年的赶脚? 扫描下方二维码,关注公众号“TJ君”,回复“OpenDiablo”,获取仓库地址 这个公众号专注分享开源项目和好用的工具,无广告!跟着TJ每天学...