2021

7月12日消息,Spring Cloud Alibaba新版本2.2.6发布,该版本适配Spring Cloud Hoxton.SR9。 下面一起来看看该版本内容: 特性增强Nacos 支持服务注册的快速失败配置spring.cloud.nacos.discovery.fail-fast,默认为false #2104 Dubbo 重构Dubbo的集成 #2101 #2121 缺陷修复Nacos 修复Nacos在k8s环境下,因DNS不起作用而导致不工作的问题 alibaba/nacos#5291 修复当实例不在默认组下时无法获取实例的问题 #2113 修复NacosWatch对zipkin跟踪的影响 #2140 Dubbo 修复了SCA中组聚合不起作用的问题 #1992 修复SCA dubbo TagRouter的元数据错误 #2031 #2037 修复服务更改期间出现...

什么是设计模式 设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 为什么要学习设计模式 看懂源代码:如果你不懂设计模式去看Jdk、Spring、SpringMVC、IO等等等等的源码,你会很迷茫,你会寸步难行 看看前辈的代码:你去个公司难道都是新项目让你接手?很有可能是接盘的,前辈的开发难道不用设计模式? 编写自己的理想中的好代码:我个人反正是这样的,对于我自己开发的项目我会很认真,我对他比对我女朋友还好,把项目当成自己的儿子一样 设计模式分类 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、...

近日,在GraphQL Java诞生6周年的时候,Spring社区通过博客宣布正式创建全新项目:Spring GraphQL,同时还发布了这个新项目的里程碑1.0版本。 博客原文:https://spring.io/blog/2021/07/06/hello-spring-graphql 该项目的任务是将GraphQL Java集成入Spring生态,而这个项目的开发工作将由双方两个团队共同承担。 什么是 GraphQL?纵使GraphQL在国外开始就被炒的火热,但到了国内就跟Hibernate、JPA一样,并没有能够被广泛的应用起来。以至于很开发者并不太了解什么是GraphQL。 下面是GraphQL中文网的介绍,一起认识一下吧: GraphQL是一种用于API的查询语言,同时也是一个可以满足数据查询的语言。它对你API中的数据提供了一套易于理解的完整描述,这就使得客户端可以准确的...

今天到工作室比较晚,在电脑前吃着早饭,看到提示IDEA提示升级,寻思已经有好久没有升过级了。一样等着,就升级下吧。 升级完毕重启之后,突然发现好多错误,原来的应用也没法启动了。仔细一看报错信息,是由于Lombok相关的注解似乎都没有生效。 比如:用到@Slf4j的类里,会有类似这样的报错: java: 找不到符号 符号: 变量 log 位置: 类 com.didispace.UserService IDEA还提示,现在使用的编译器不支持lombok java: You aren't using a compiler supported by lombok, so lombok will not work and has been disabled. Your processor is: com.sun.proxy.$Proxy26 Lombok supports...

上周,我们通过这篇文章《为什么catch了异常,但事务还是回滚了?》来解释了,之前test4为什么会回滚的原因。 但还是收到了很多没有理解的反馈,主要是根据前文给出的线索去跟踪,是获得到了回滚的标示和异常,而让大家不理解的是,javax.validation.ConstraintViolationException异常不是最后也向外抛出了,那么为什么test4里catch没有能够捕获到呢? 其实这个问题并不难解释,下面就通过这篇文章,做个小实验,帮助大家进一步理解大家的这个疑问! 如果你还不了解这篇文章在讨论什么,建议先看之前的两篇: 《我来出个题:这个事务会不会回滚?》 《为什么catch了异常,但事务还是回滚了?》 动手尝试一下由于@Transactional注解的事务是通过切面来实现的,所以要通过源码去了解整个过程,可能还是不容易理解。 所以,这里教大家一个简单方法来理解这...

为什么选择微服务架构?近几年,微服务架构一直是热点之一,并且被公认为是 IT 软件架构的未来方向。 它是一种灵活的演进式架构,可以提升企业研发效能,同时赋能业务快速创新,目前众多企业应用微服务化,其中包括阿里、Netflix 等。我相信,企业应用微服务化是必然趋势,微服务人才的需求也会越来越高。 微服务架构难?难于上青天?微服务架构落地实施的技术门槛会比较高,它需要基础平台的支撑,包括服务发现,路由,配置,安全和监控等等。这也是现在很多企业面临的困境,有业务微服务改造的需求,但技术人员大都欠缺相关技术经验,无法实施落地。 在我看来,造成这种困惑的主要原因,是缺乏端到端的贴近生产的微服务应用案例。 这里,推荐给你一个叫 Staffjoy 的开源项目,开发了教学版的微服务案例项目。整个项目采用微服务架构,并且可以一键部署到 Kubernetes 容器云环境。 直达 Staffjoy 教学...

前几天我发了这篇文章《我来出个题:这个事务会不会回滚?》 得到了很多不错的反馈,也有不少读者通过微信、群或者邮件的方式,给了我一些关于test4的回复。其中还有直接发给我测试案例,来证明我的答案是错的。 今天,我们就来一起看看test4这个争议很大的问题。如果您是刚打开这篇文章,不了解我们在讨论啥,那可以先点击查看之前的这篇《我来出个题:这个事务会不会回滚?》。 通过这两篇文章的解析,相信你会对Spring Data JPA下的事务执行机制有质的飞跃。 为什么没回滚先来说说,那些写了代码验证“不会回滚”的情况,把这些错误答案的原因先说清楚,然后再细说test4会回滚的情况。 根据这两天读者给我的案例或者描述清楚的一些情况,归结了一下,大家写的验证代码之所以不会回滚,主要有以下三个原因: 没有按照我题目开头说的,采用InnoDB存储引擎,用了MyISAM,不支持事务,自然不会复现。 ...

下面这个问题源于前几日在我们的Spring技术交流群里,一个群友提出的关于事务回滚的疑问。 在讨论过程中,我尝试去复现群友提出的问题场景,发现了另外一个可能让大家会迷惑的情况。 当时在群里说了结果和原因,但微信群范围有限,所以单独写篇文章,拿出来给大家看看,顺便考考大家,对这块是否了解。 问题描述这个问题的基础工程我用了之前Spring Boot 2.x基础教程中《使用Spring Data JPA访问MySQL》的案例。 你可以通过下面仓库中的chapter3-10目录获取基础工程: Github:https://github.com/dyc87112/SpringBoot-Learning/ Gitee:https://gitee.com/didispace/SpringBoot-Learning/ 在这个工程中,定义一个名为User的实体: @Entity@Data@NoA...

6月24日,微软正式公布了新一代操作系统:Windows 11。这次的更新距离上一代操作系统Windows 10的发布,隔了有6年之久。 在新一代的操作系统中,包含了这些亮点: 采用了全新的UI设计、优化了触控体验 改进应用商店 原生支持运行安卓应用 移除对32位设备的支持 一场新屠杀的开始如果要在这次的新一代操作系统中,选择一项你认为最突破的亮点,相信你会与我一样,选择“原生支持运行安卓应用”。 在移动互联网蓬勃发展的当下,我们大量的互联网使用时间,从PC端转移到了移动端,也因为这样的现象,很多互联网产品对于移动端的重视远高于PC端,甚至有些产品都关闭了PC端的入口。这使得,一些有大量时间在PC端的用户,不得不在移动设备与PC设备间切换使用。 这次的Windows 11可以直接支持运行安卓应用,那么对于在使用PC端的用户,就不可以一个屏幕同时使用PC应用和A...

Spring Boot 2.5.2 现已发布。此版本包括 53 个错误修复、文档改进和依赖项升级。 主要更新内容 实例化器在没有类加载器的情况下被调用 EnvironmentPostProcessors 未使用正确的 ClassLoader 进行实例化 将不存在的类的名称绑定到 Class<?> 属性时失败 无法排除对重新打包的依赖 当应用程序上下文关闭时死锁,然后在应用程序上下文刷新期间调用 System.exit(int) NettyProperties.leakDetection 的默认值与 Netty 的默认值不一致 处理 “spring.config.import” 属性时仍应进行特定于配置文件的解析 在依赖于 org.springframework.boot:spring-boot-configuration-processor 的项目中使用配置缓存时,Gr...

通过前面一篇集中式缓存的使用教程,我们已经了解了Redis的核心功能:作为K、V存储的高性能缓存。 接下来我们会分几篇来继续讲讲Redis的一些其他强大用法!如果你对此感兴趣,一定要关注收藏我哦! 发布订阅模式如果你看过之前我写的关于MQ的相关文章,那么对于发布订阅功能应该不会陌生。如果没看过,那也不要紧,这里先做一个简单介绍,已经了解的可以跳过直接看下一节内容。 什么是发布订阅模式? 在发布订阅模式中有个重要的角色,一个是发布者Publisher,另一个订阅者Subscriber。本质上来说,发布订阅模式就是一种生产者消费者模式,Publisher负责生产消息,而Subscriber则负责消费它所订阅的消息。这种模式被广泛的应用于软硬件的系统设计中。比如:配置中心的一个配置修改之后,就是通过发布订阅的方式传递给订阅这个配置的订阅者来实现自动刷新的。 不就是观察者模式吗? 看到这里,...

很多时候,我们在做公司系统或产品时,都需要自己创建用户管理体系,这对于开发人员来说并不是什么难事,但是当我们需要维护多个不同系统并且相同用户跨系统使用的情况下,如果每个系统维护自己的用户信息,那么此时用户信息的同步就会变的比较麻烦,对于用户自身来说也会非常困扰,很容易出现不同系统密码不一致啊等情况出现。 如果此时我们引入LDAP来集中存储用户的基本信息并提供统一的读写接口和校验机制,那么这样的问题就比较容易解决了。尤其在一些内部管理系统的开发和搭建时,往往我们的内部系统一开始并不全是自己开发的,还有很多第三方产品支持,比如:OA系统、财务系统等,如果自己开发一套用户管理系统,那么这些系统对接还得二次开发,成本很大。由于LDAP并不是什么新技术,大部分成熟软件都支持用LDAP来管理用户,所以时至今日,LDAP的应用依然可以经常看到。 下面我们就具体来看看,当使用Spring Boot...

在之前的所有Spring Boot教程中,我们都只提到和用到了针对HTML和JSON格式的请求与响应处理。那么对于XML格式的请求要如何快速的在Controller中包装成对象,以及如何以XML的格式返回一个对象呢? 实现原理:消息转换器(Message Converter)在扩展上述问题之前,我们先要知道Spring Boot中处理HTTP请求的实现是采用的Spring MVC。而在Spring MVC中有一个消息转换器这个概念,它主要负责处理各种不同格式的请求数据进行处理,并包转换成对象,以提供更好的编程体验。 在Spring MVC中定义了HttpMessageConverter接口,抽象了消息转换器对类型的判断、对读写的判断与操作,具体可见如下定义: public interface HttpMessageConverter<T> { boolea...

文章介绍了spring-boot中实现通用auth的四种方式,包括 传统AOP、拦截器、参数解析器和过滤器,并提供了对应的实例代码,最后简单总结了下他们的执行顺序。 前言最近一直被无尽的业务需求淹没,没时间喘息,终于接到一个能让我突破代码舒适区的活儿,解决它的过程非常曲折,一度让我怀疑人生,不过收获也很大,代码方面不明显,但感觉自己抹掉了 java、Tomcat、Spring 一直挡在我眼前的一层纱。对它们的理解上了一个新的层次。 好久没输出了,于是挑一个方面总结一下,希望在梳理过程中再了解一些其他的东西。由于 Java 繁荣的生态,下面每一个模块都有大量的文章专门讲述。所以我选了另外一个角度,从实际问题出发,将这些分散的知识串联起来,各位可以作为一个综述来看。各个模块的极致详细介绍,大家可以去翻官方文档或看网络上的其他博客。 需求很简单清晰,跟产品们提的妖艳需求一点也不一样:在我们...

Spring Boot 2.5.1 、2.4.7 已经发布。现在可从 repo.spring.io 和 Maven Central 获得。 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.1</version> <relativePath/></parent> 这是一个提前发布的 BUG FIX 版本,由于官方在 发布 SpringBoot 2.5.0 后收到大量的 BUG 反馈。 如果你还没有开始使用 spring boot 2.5.0, 请直接使用 2.5.1 向下兼容。 修复缺...