码猿技术专栏

微信公众号:码猿技术专栏

前言

先和大家分享一个好消息:10月初陈某的粉丝数破一万了,非常感谢各位读者的支持!

这是《Spring Cloud 进阶》专栏的第六篇文章,往期文章如下:

这篇文章主要介绍一些目前主流的几种分布式解决方案以及阿里开源的一站式分布式解决方案Seata。

文章有点长,耐心看完,看完你还不懂分布式事务,欢迎来捶我……………

文章目录如下:

阅读全文 »

1、前言

这是《spring Cloud 进阶》专栏的第五篇文章,这篇文章介绍一下阿里开源的流量防卫兵Sentinel,一款非常优秀的开源项目,经过近10年的双十一的考验,非常成熟的一款产品。往期文章如下:

文章目录如下:

阅读全文 »

合适的工具可以改进我们的代码,并且提高开发效率。在IDR解决方案中,我们一直在找一些方法来改进我们的代码。但最近,我们在考虑改进PDF HTML5转换器和Java PDF类库代码时,发现最近我们的关注点已经开始转换到如何提升Java性能。

在这篇文章中,我会带着大家一起看一下9个可以帮助我们优化Java性能的工具。有一些我们已经在IDR Solutions中使用了,而另外一些有可能在个人项目中使用。

1、NetBeans Profiler

NetBeans profiler是一个NetBeans IDE插件,主要为NetBeans IDE提供性能分析相关的功。NetBeans IDE是一个开源的集成开发环境。它很好地支持所有Java应用类型(包括Java SE、JavaFX、Java ME、Web、EJB和移动应用)的开发。

这个性能分析器包含了诸如CPU、内存和线程性能分析功能,并且提供了一些用于基本JVM监控的附加工具和功能。对于需要解决内存和性能相关问题的开发者非常有用。

阅读全文 »

1、前言

微服务的注册中心目前主流的有以下四种:

  • Zookeeper
  • Eureka
  • Consul
  • Kubernetes

那么实际开发中到底如何选择呢?这是一个值得深入研究的事情,别着急,今天陈某就带大家深入了解一下这四类注册中心以及如何选型的问题。

这是《Spring Cloud 进阶》专栏第篇文章,往期文章如下:

阅读全文 »

一、Spring Web MVC 与 Spring Bean 注解

@RequestMapping

@RequestMapping注解的主要用途是将Web请求与请求处理类中的方法进行映射。Spring MVC和Spring WebFlux都通过RquestMappingHandlerMappingRequestMappingHndlerAdapter两个类来提供对@RequestMapping注解的支持。

@RequestMapping注解对请求处理类中的请求处理方法进行标注;@RequestMapping注解拥有以下的六个配置属性:

  • value:映射的请求URL或者其别名
  • method:兼容HTTP的方法名
  • params:根据HTTP参数的存在、缺省或值对请求进行过滤
  • header:根据HTTP Header的存在、缺省或值对请求进行过滤
  • consume:设定在HTTP请求正文中允许使用的媒体类型
  • product:在HTTP响应体中允许使用的媒体类型

提示:在使用@RequestMapping之前,请求处理类还需要使用@Controller或@RestController进行标记

阅读全文 »

这是《Spring Cloud 进阶》专栏第三篇文章,前两篇分别介绍了NacosopenFeign,有不清楚的可以回看之前的文章:

今天这篇文章将从10个维度介绍一下配置中心的选型问题,为什么要写这篇文章呢?是因为:

  • 工作所需,要做一款好用的开源产品,去试用提供相似功能的开源产品是必要的环节,以找出优势,弥补不足;
  • 用户所需,对于提供相似功能的产品进行选型对比,是引入某个开源项目必须要做的事,如果有一份参考,那么势必能提供一些帮助;(建议:即便有一份可参考的材料,技术选型的工作仍需要亲力亲为,实际的业务场景和资源配置才是技术选型最重要的依据);
  • 微服务配置中心是一个微服务组件,而不是一个大的框架,选型成本较小,客观对比时不易走偏;

本文将从产品功能、使用体验、实施过程和性能4个纬度进行对比,所有素材均来源于该开源项目的官网或GitHub项目页。

如果您对微服务配置中心的功能不是很了解,可以看下以下的背景介绍,若比较熟悉可以直接跳过。

阅读全文 »

1、前言

前面介绍了Spring Cloud 中的灵魂摆渡者Nacos,和它的前辈们相比不仅仅功能强大,而且部署非常简单。

今天介绍一款服务调用的组件:OpenFeign,同样是一款超越先辈(RibbonFeign)的狠角色。

文章目录如下:

阅读全文 »

1、前言

在开发中,往往会遇到一些关于延时任务的需求。例如

  • 生成订单30分钟未支付,则自动取消
  • 生成订单60秒后,给用户发短信

对上述的任务,我们给一个专业的名字来形容,那就是延时任务。那么这里就会产生一个问题,这个延时任务和定时任务的区别究竟在哪里呢?一共有如下几点区别

  • 定时任务有明确的触发时间,延时任务没有

  • 定时任务有执行周期,而延时任务在某事件触发后一段时间内执行,没有执行周期

  • 定时任务一般执行的是批处理操作是多个任务,而延时任务一般是单个任务

下面,我们以判断订单是否超时为例,进行方案分析。

阅读全文 »

前言

对于微服务而言配置本地化是个很大的鸡肋,不可能每次需要改个配置都要重新把服务重新启动一遍,因此最终的解决方案都是将配置外部化,托管在一个平台上达到不用重启服务即可一次修改多处生效的目的。

但是对于单体应用的Spring Boot项目而言,动态刷新显然是有点多余,反正就一个服务,改下重启不就行了?

然而在某些特殊的场景下还是必须用到动态刷新的,如下:

  1. 添加数据源:对接某个第三方平台的时候,你不可能每次添加一个数据源都要重启下服务
  2. 固化的对接:大量的固定对接方式,只是其中的某个固定的代码段不同,比如提供视图中的字段不同,接口服务中字段不同等情况。

当然以上列举的两种场景每个公司都有不同的解决方案,这里不做深究。

阅读全文 »

1、什么是MapStruct

1.1 JavaBean 的困扰

对于代码中 JavaBean之间的转换, 一直是困扰我很久的事情。在开发的时候我看到业务代码之间有很多的 JavaBean 之间的相互转化, 非常的影响观感,却又不得不存在。我后来想的一个办法就是通过反射,或者自己写很多的转换器。

第一种通过反射的方法确实比较方便,但是现在无论是 BeanUtils, BeanCopier 等在使用反射的时候都会影响到性能。虽然我们可以进行反射信息的缓存来提高性能。但是像这种的话,需要类型和名称都一样才会进行映射,有很多时候,由于不同的团队之间使用的名词不一样,还是需要很多的手动 set/get 等功能。

第二种的话就是会很浪费时间,而且在添加新的字段的时候也要进行方法的修改。不过,由于不需要进行反射,其性能是很高的。

阅读全文 »