摘要:
Hibernate-Validator框架提供了一系列的注解去校验字段是否符合预期,如@NotNull注解可以校验字段是否为null,如果为null则抛出对应的异常提示信息,通过注解大大减少了我们日常的开发工作量。包括流行的spring-boot-starter-validation,底层也是靠Hibernate-Validator实现的。
但是在实际的开发中,现有的注解可能不能满足我们的校验需求,Hibernate-Validator框架就贴心的提供了扩展,通过自定义校验注解来封装我们自己的校验逻辑。 阅读全文
摘要:
一、Conditional注解介绍 对SpringBoot有足够了解的小伙伴应该都用过Conditional系列注解,该注解可用在类或者方法上用于控制Bean的初始化。 常用的Conditional注解有以下几种: @ConditionalOnBean:如果存在对应的Bean,则进行当前Bean的初 阅读全文
摘要:
一、简介 在近几年流行的微服务架构中,由于对服务和数据库进行了拆分,原来的一个单进程本地事务变成多个进程的本地事务,这时要保证数据的一致性,就需要用到分布式事务了。分布式事务的解决方案有很多,其中国内比较主流的框架就是Seata了。 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单 阅读全文
摘要:
一、前言 最近在github上看了soul网关的设计,突然就来了兴趣准备自己从零开始写一个高性能的网关。折腾了大概三周时间,网关ship-gate核心功能基本都已完成,写这篇文章是记录我是如何从零开始手写一个网关的。 二、设计 2.1技术选型 网关是所有请求的入口,所以要求有很高的吞吐量,为了实 阅读全文
摘要:
一、锁介绍 不同存储引擎支持的锁是不同的,比如MyISAM只有表锁,而InnoDB既支持表锁又支持行锁。 下图展示了InnoDB不同锁类型之间的关系: 图中的概念比较多不好理解,下面依次进行说明。 1.1乐观锁 乐观锁是相对悲观锁而言的,乐观锁假设数据一般情况下不会造成冲突,所在在数据进行提交更 阅读全文
摘要:
一、前言 前段时间看到一篇不错的文章《看了这篇你就会手写RPC框架了》,于是便来了兴趣对着实现了一遍,后面觉得还有很多优化的地方便对其进行了改进。 主要改动点如下: 除了Java序列化协议,增加了protobuf和kryo序列化协议,配置即用。 增加多种负载均衡算法(随机、轮询、加权轮询、平滑加权轮 阅读全文
摘要:
一、前言 要想成为一名高级Java开发具备JVM调优的能力必不可少,能够根据项目实际情况进行JVM调优的前提是理解JVM原理和常用JVM参数的含义及作用,虽然《深入理解Java虚拟机》这本书已经写了很多,但是里面的提到的参数比较散乱,故写此文总结。 二、JVM参数JVM相关参数名称作用默认值备注-Xms初始堆大小物理内存的1/64(113543K(130112K), 0.0094143 ... 阅读全文
摘要:
一、简介 当我们需要对一个类(A)的功能进行扩展的时候,可以选择使用继承通过子类(B)来实现,但是如果后来又要对A类增加一些功能且其中一些功能原来我们在子类B中已经实现过了,这时候怎么办呢? 这时候只能再用子类C继承A类并把代码重写一遍,然后子类就越来越多难以维护且有很多重复代码不够灵活。 我们知道 阅读全文
摘要:
一、简介 插入式注解处理器是JSR-269中定义的API,该API可以在编译期对代码中的特定注解进行处理,从而影响到前端编译器的工作过程,通过插入式注解处理器可以读取、修改、添加抽象语法树中的任意元素,这样就可以实现很多很cool的功能。 著名的Lombok就用到插入式注解处理器,它可以通过注解来实现自动生成getter/setter方法、生成equals()和hashCode()方法等... 阅读全文
摘要:
一、背景 SpringBoot的应用监控方案比较多,SpringBoot+Prometheus+Grafana是目前比较常用的方案之一。它们三者之间的关系大概如下图: 关系图 二、开发SpringBoot应用 首先,创建一个SpringBoot项目,pom文件如下: <dependency> <gr 阅读全文