2021

一直以来,写日常问题、前沿技术和架构思考类的文章比较多,今天为什么突然来说说Swing这个陈年老技术呢? 因为在CSDN上看到了这样的一篇文章: 可以看到作者对于学Swing还是挺愤怒的,不过确实Swing现在很少用了。但我的观点还不是那么绝对,因为从个人成长来说,Swing的学习确实给到了不少收获。开始也没打算专门来写篇文章说说看法,然后上了一下掘金,居然就又看到了这篇文章(强大的推荐机制): 开始看标题格式还以为是同一篇,仔细看才知道原来是驳前面那篇的,对于后面那篇的不少观点,个人还是比较认同的。 同时也因为作者的观点,联想到经常有读者跟我聊遇到职业瓶颈的问题,与我给出的建议有很多不谋而合的认识,所以还是想写一篇文章来说说。 首先,我尊重每个人对技术学习的观点,这里不评论到底谁对谁错,我就结合自己的学习和成长路径,谈谈这个问题的看法吧。如果屏幕前的你是正在读书的学生或是遇到...

2021年5月28日,Spring Cloud发布2020.0.3版本。该版本已经可以在Maven Central中找到。 版本内容该版本是一个Bug修复和依赖升级版本。其中主要更新的内容如下: Spring Cloud Commons 增加禁用负载均衡的属性配置 #940 Spring Cloud Config 修复了几个用Spring Cloud Config Server时候,spring.config.import配置相关的Bug Spring Cloud Consul 修复与spring.config.import相关的远程配置与本地配置的特定问题 #706 Spring Cloud Kubernetes 基于DiscoveryClient实现的时候默认使用当前namespace (#678) Spring Cloud CircuitBreaker Rea...

今天看到群里有小伙伴问,这个异常要怎么解决: java.lang.IllegalArgumentException: Request header is too large 异常原因根据Exception MessageRequest header is too large,就可以判断这个错误原因是HTTP请求头过大导致的。 如何解决解决方法主要两个方向: 方向一: 配置应用服务器使其允许的最大值 > 你实用实用的请求头数据大小 如果用Spring Boot的话,只需要在配置文件里配置这个参数即可: server.max-http-header-size= 方向二:规避请求头过大的情况 虽然上面的配置可以在解决,但是如果无节制的使用header部分,那么这个参数就会变得不可控。 对于请求头部分的数据其实本身并不建议放太大的数据,所以,还是建议把这些数据放到body里更为合理。 ...

这几天在不同的微信群和社区里连续碰到了类似的问题: 比如spring4all的帖子:http://bbs.spring4all.com/thread/21 又比如今天在秦总的群里也进行了类似的讨论。 虽然描述不同,但核心都围绕着一个问题:两个不同注册中心下的服务要如何互相调用? 下面就针对这个问题,展开说说我的思考、实践与建议。 为什么会有这样的场景?先来说说背景问题,有的群友在看到这类问题的时候,第一反应就是怎么用多个注册中心,是不是蛋疼了瞎搞的? 显然有点脑子的人都不会这样做!那么为什么会存在这样的场景呢,通常都是这样演变而来的: 缺少统一的基础技术平台管理,几乎所有做大的企业都会碰到这样的问题。为了业务野蛮发展的时期,技术团队是很少有精力去做这些治理的,通过系统边界划分好之后,因为系统与系统间的交互通过协议定义规范就好,每个系统内部的技术栈根据团队特性选择自己最擅长的就行...

前几天Spring Boot 2.5.0发布了,其中提到了关于Datasource初始化机制的调整,有读者私信想了解这方面做了什么调整。那么今天就要详细说说这个重新设计的配置内容,并结合实际情况说说我的理解和实践建议。 弃用内容先来纠正一个误区。主要之前在版本更新介绍的时候,存在一些表述上的问题。导致部分读者认为这次的更新是Datasource本身初始化的调整,但其实并不是。这次重新设计的只是对Datasource脚本初始化机制的重新设计。 先来看看这次被弃用部分的内容(位于org.springframework.boot.autoconfigure.jdbc.DataSourceProperties),如果你有用过这些配置内容,那么新配置就很容易理解了。 /** * Mode to apply when determining if DataSource initializatio...

今年的520事情是真的多,把Spring Boot 2.5.0的版本发布都给忽略了!今天就跟DD一起看看Spring Boot 2.5.0又都带来了哪些振奋人心的新特性吧! 主要更新 支持 Java 16 支持 Gradle 7 支持 Jetty 10 增强 Docker 镜像的构建 更新了Datasource的初始化机制 除了框架功能更新之后,该版本在文档方面也顺应时代潮流,增加了暗黑模式的支持! 长这样,是你喜欢的阅读模式吗? 其他更新 management.endpoints.web.cors.allowed-origin-patterns配置可以用来控制是否允许Actuator端点跨域访问 HttpSessionIdListener现在开始自动注册到Servlet上下文 Couchbase现在默认使用自动化配置的ObjectMapper Elasticsearch的Sni...

关于低代码平台,之前我也推送过两篇相关的文章,我的观点很简单:东西是好的,有它所擅长和适用的领域,但软件产品不存在银弹,低代码平台一样如此! 现在在搜索引擎上搜“低代码”这样的关键词,你会看到很多夸张的标题,比如: “人人都是产品经理”之后,“人人都是程序员”的时代要来了? 阿里、腾讯都在押注的新赛道,能让程序员告别脱发和996吗? 还有诸多低代码平台的公司拿到各种融资或地区性政府补贴的新闻 甚至我还在福报长的抖音账号中,看到了程序员下午坐在外面喝咖啡,说有了低代码,现在大把时间休息的短视频。。。 低代码平台真的这么神奇?我们在企业数字化转型过程中的开发任务都可以用低代码平台来解决吗?我们开发者996的宿命就这样被搞定了? 如果你正对低代码平台抱有上面幻想的话,一定要好好看看下面的内容! 先表明观点:如果你试图使用低代码平台去解决所有开发问题的时候,很有可能这样的决定将在2-3年...

之前因为在做顾问与咨询的时候,见到了一种关于API网关和注册中心的错误用法。在我的星球里分享了一下这个案例,没想到最近又碰到了两个类似的案例。也许这样的问题还存在不少团队的应用中,所以再拿出来分享一下,希望可以帮助读者更好的理解注册中心与API网关的作用,并将它们用对地方! 在微服务架构中,我们都会使用API网关来作为暴露服务的唯一出口。这样可以讲与业务无关的各项控制,集中的在API网关中进行统一管理,从而使得业务服务可以更加专注于业务领域本身。 而在微服务构建的系统内部,各个服务之间的调度,我们通常采用注册中心和客户端负载均衡的方式来治理服务之间的调用。 所以,大致的结构是这样子的: 关于注册中心和API网关的功能,主要有以下两点: API网关通过注册中心发现所有后端服务,从来实现动态代理 后端服务集群间,通过注册中心互相发现对方,而实现直接调用 下面就具体说说这个常见的错误...

Spring Boot 2.4.5 & 2.3.10 现已发布。 本次更新是错误修复版本,分别包含 57 个与 78 个错误修复。 主要更新内容2.4.5 当 spring.main.cloud-platform 被设置为NONE时,CloudPlatform.isActive 可以返回 true Elasticsearch 自动配置没有配置默认的转换器 Gradle bootBuildImage 不会保留资源的文件权限 Keystore.load 调用不会关闭 InputStream 带有 Reactory Netty 的 TCP 的密码配置被忽略 修复使用 Cassandra 关闭 Spring Boot 应用程序时出现 java.util.concurrent.RejectedExecutionException 的问题 修复 spring-boot:build-ima...

有没有发现,每隔几年总会有一些火热的前沿词汇出现在我们面前,比如:云原生、微服务、中台、Servless、低代码等等。那么你是否有想过,这些概念的背后是什么推动的呢?结论并不难发现,从各种概念的目标上去合并同类项,它们的本质目标都是:提高研发效率! 在提高研发效率的道路上,各种方案都有着不同的侧重点,有的着力于基础设施的完善,有的着力于系统架构的优化,有的着力于生产工具的更新。拿最近最为热门的低代码平台来说,更多的是站在生产工具这一侧重点之上。 不同于传统IDE的生产工具说到生产工具的提升,我们往往第一反应想到的是IDE上的优化,比如:IDEA、Eclipse这些开发工具上所做的文章,而低代码平台与这些还有着本质区别。 在传统开发工具的产品迭代上,我们更多看到优化点是:更酷炫的界面、更友好的编码联想、更精准的错误提示、更方便的调试流程、更便捷的构建工具等面向传统开发者的完善方向。这方...

一直关注Java的小伙伴想必或多或少听说过业界两位大佬,谷歌和甲骨文那场旷日持久的关于Java代码的侵权诉讼案,案件索赔高达近百亿美元。 事情的起因在于2010年甲骨文收购Sun之后获得了Java技术的一系列知识产权,随即起诉另外一位业界巨头谷歌,称其开发安卓系统时非法复制旗下子公司的Java api代码数万行。从而开始了一场十年的拉锯战: 2010 年,甲骨文起诉谷歌侵犯了与 Java 相关的专利和版权,初步索赔 80 亿美元; 2012 年 5 月,加州北区联邦法院裁定谷歌没有侵犯 Java 版权,Java API 不受版权保护;同年 10 月,甲骨文上诉至联邦巡回上诉法院。 2014 年,美国联邦巡回上诉法院推翻了一审部分结论,称必须尊重软件的版权保护,甲骨文赢得上诉,此案被发回重审。甲骨文此时将索赔提升至93亿美元。同年 10 月,谷歌申请美国联邦最高法院听审此案。 201...

这两天喜欢玩游戏的程序猿可有福了,前两天刚给大家介绍过暴雪大放送活动,还不知道的点这里:暴雪来送大礼了,速领! 想必也有很多小伙伴一直都羡慕那些手握Switch的同伴,今天小编准备教你的就是,如何在PC端玩Switch! 首先给大家介绍下,这个模拟器是基于C#搭建的,所以需要小伙伴们先下一个.NET 5.0 (或者更高版本) SDK作为环境基础。 安装完之后下载模拟器文件:Ryujinx-master 将Ryujinx-master解压到小伙伴心仪的路径,建议使用英文路径,避免出现各种中文路径识别问题 解压之后是这个样子 这个时候先做一件事情,下载一个组件gtk-3.24.20.zip,放到这个目录下:C:\Users\XXX\AppData\Local\Gtk\3.24.20,其中XXX就是各位自己的电脑名字替代,因为模拟器在自运行过程中会自动去github下载这个文件,小...

大千世界无奇不有,尤其是现在的互联网时代,赚钱的法子真是千方百计,只有你想不到没有别人做不到。 国外有一位小哥,就靠emoji表情大赚了一笔。emoji表情,相信很多人都很熟悉,各种可爱的造型让人爱不释手。 但是这位小哥,是靠emoji表情域名发达的,最终在TikTok上走红,每周能赚1000美元,是不是不敢相信? 我们一起来看看他是怎么做到的 最初的时候,小哥只是想买一个域名netflix.soy. 在花了17美元之后,小哥对域名也有了一定的了解,并且突发奇想想着可以用emoji表情作为域名。当时小哥只是觉得有意思,毕竟平时可不太见到emoji表情的域名。 所以,小哥做出一个决定,买一个emoji表情的域名。 找来找去,小哥先是找到一个网站,可以用4种不同的TLDs来拓展emoji表情作为域名。(.fm, .ws, .to , .ml) 不过可惜的是,几乎都被人买了,看来像这个...

前不久的这条新闻或许大家已经有所耳闻: 位于法国斯特拉斯堡的 OVH 数据中心被大火烧毁。据悉,火灾导致多个数据中心无法服务,大量客户网站瘫痪,部分客户数据完全丢失且无法恢复,这是数据中心历史上史无前例的灾难性事件。 我们今天不讨论火灾的原因、OVH损失多少,而是想重点说说在这次火灾中受影响的用户与背后的系统设计缺陷。 在此次事件中损失最惨的是一家名叫Rust的游戏制造商,该游戏制造商失去了其公司名下游戏所有的欧洲服务器,储存在服务器上的数据全部丢失。 也许很多读者的第一反应是:玩家花费大量精力财力的账号没了,一定是伤心欲绝! 其实,从公司角度来说,他们的损失更为惨重,因为数据丢失也就意味着客户丢失,同时也意味着客户虚拟资产的丢失。这样的灾难对于企业来说,往往面临的就是一个结果:倒闭! 当知道会发生这个结果的时候,相信大家都会开始想起来,怎么不做备份啊之类的疑问?甚至也有读者可能...

Spring Cloud 2020.0.2 (aka Ilford) 已发布,这是一个小版本升级,更新内容主要是修复 bug 以及升级依赖,可从 Maven Central 获取更新。 以下模块作为 Spring Cloud 2020.0.2 的一部分已升级: Module Version Issues Spring Cloud Bus 3.0.2 Spring Cloud Circuitbreaker 2.0.1 Spring Cloud Cli 3.0.2 Spring Cloud Cloudfoundry 3.0.1 Spring Cloud Commons 3.0.2 Spring Cloud Config 3.0.3 Spring Cloud Consul 3.0.2 Spring Cloud Contract 3.0...