![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
Coder慌
一名重度代码洁癖患者
展开
-
springboot之业务异常堆栈信息优化
作为javaer都知道spring相关项目大部分情况下都会通过全局捕获异常,并将其包装为更人性化地提示给前端。并且在捕获异常后一般也都会记录到日志里(异常的调用堆栈信息),方便开发排查问题。 这里有个比较明显的问题就是系统中通常会有比较多的业务异常,即如用户不存在,状态不对等等业务异常,如果也记录全部异常堆栈信息,那么个人就觉得有点浪费磁盘空间,且底层框架的堆栈信息对排查问题没有多大指导性意义。如下图(图范围有限,底下还有许多堆栈信息):遂经过调整优化后的spring全局异常处理器之处理业务异常原创 2021-01-28 14:04:41 · 1775 阅读 · 3 评论 -
springboot @EnableAutoConfiguration自动配置超详解
springboot相关逻辑1. main启动类首先就是springboot项目习以为常的main方法调用SpringApplication.run将标注有@SpringBootApplication注解的class对象作为参数传递。SpringBootApplication注解是个组合注解,主要组合了@Configuration,@EnableAutoConfiguration,@Import(AutoConfigurationImportSelector.class), @ComponentScan原创 2020-11-26 16:45:55 · 1945 阅读 · 0 评论 -
基于javax.validation自定义日期范围校验注解
实际项目中经常需要对传入的日期时间进行判断,如是否为一年内,几个月之内,几天前,几天之内等等的需求。如要求前端传入的日期是要为当前日期一年内的某个日期,基于jdk8的LocalDateTime or LocalDate等常用的做法如下: // 前端传字符串如‘2020-07-13 09:09:09’ springmvc接收并转换为LocalDateTime类型 @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH原创 2020-07-13 10:12:42 · 8401 阅读 · 0 评论 -
java之TreeUtils生成一切对象树形结构
项目中经常会遇到各种需要以树形结构展示的功能,比较常见的,如菜单树,分类树,部门树等等,如果为每种类型都遍历递归生成树形结构返回给前端,显得有些冗余且麻烦,并且其实逻辑都是一致的,只是遍历的对象不同而已,故其实可以通过面向接口思维,来实现这种通用工具类的实现。TreeNode用来表示每个树节点的抽象,即需要生成树的对象需要实现此接口。 /** * 树节点父类,所有需要使用{@l...原创 2020-04-02 14:24:00 · 3821 阅读 · 0 评论 -
JVM之内存布局超详细整理
内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和立用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的JVM对于内存的划分方式和管理机制存在着部分差异。结合JVM虚拟机规范,来学习一 下经典的JVM内存布局。 话不多说,先来一图(截图来至阿里的<码出高效:java开发手册>)。上图就...原创 2019-10-29 17:37:51 · 975 阅读 · 0 评论 -
EnumUtils重构及自定义@EnumValue注解自动校验枚举值
EnumUtils主要功能介绍该简单介绍可看笔者之前文章 java枚举工具类(减少每个枚举中重复的方法)但以上该方式存在一些问题,例如枚举值(value)可能为String也可能为Byte等等,不止只是Integer类型,而且有些枚举可能不需要枚举名称(name)属性,只需要个枚举值value属性即可,以上最简单的实现方式就不支持这些需求了,故通过拆分BaseEnum接口以及增加泛型来支持该要...原创 2019-09-29 09:51:36 · 3709 阅读 · 0 评论 -
基于断言方式,减少业务逻辑中大量if判断
前言使用过spring全家桶的都应该知道现如今大部分系统对于业务逻辑的异常处理,都是基于springmvc的统一异常处理器进行拦截包装后,返回给前端一个Result(包含code,业务异常msg等消息)结果对象,前端可以根据code以及msg进行友好提示。如下:自定义业务逻辑异常/** * @author meilin.huang * @version 1.0 * @date 20...原创 2019-08-14 09:56:13 · 1441 阅读 · 2 评论 -
Spring组合注解的神奇实用功能详解(功能组合以及别名属性覆盖)
组合注解 注解的作用就不用介绍了吧,主要就是用来简化配置,通过自定义注解或者其他框架提供的注解,只要往方法或者类上一加,就可以实现许多神奇的功能。 spring 4.2之后就提供了组合注解的实现方式,啥是组合注解呢,其实就是将多个注解作用于一个注解,用一个注解就可以来实现那多个注解的功能,使作用的元素(即方法或类等)看上去更简洁美观,当然主要还是更强大的属性覆盖功能。 举个最常见的组合...原创 2019-06-07 01:02:22 · 3075 阅读 · 2 评论 -
java枚举工具类(减少每个枚举中重复的方法)
前言几乎每个系统或多或少都会有些枚举,用来减少硬编码。有时保存数据的时候需要使用下拉框选择枚举,如下图枚举值 1->GET, 2->POST, 3->PUT, 4->DELETE,而传到后端的是value比如选择GET时,传到后端保存的是1这个值,controller接收的就是Integer类型。如上图,后端可定义枚举类MethodEnum/** * @auth...原创 2019-03-28 16:40:32 · 1364 阅读 · 0 评论 -
Mybatis之通用Mapper(基于mybatis的Provider机制无需第三方插件包)
前言几乎每个系统都需要单表的基础操作(即增删改查分页查询等),如果不使用通用的Mapper则需要每个mapper中都需要实现对应的重复方法,虽然mybatis逆向生成工具会生成对应的.xml文件。里面已经含有一些通用的方法,但是每个实体对应一个.xml文件太复杂。而mybatis也支持注解方式实现sql,使用注解方式实现sql方式,个人感觉更简洁,也符合减少配置文件的趋势。如springboot...原创 2019-03-27 15:35:38 · 1720 阅读 · 7 评论 -
java模板字符串优雅解析(占位符解析)
项目中常常需要解析字符串模板,比如user:{userId}:{userType}用于redis的key等,比较常见的做法就是使用String.format方法,但个人感觉那样的模板不够明了,故使用模板解析器可更好地有助于解析此类字符串。可申明一个map用于解析,也可使用对象进行解析,有点类似于js的模板字符串${}/** * 占位符解析器 * * @author meilin.huang...原创 2019-03-14 19:02:04 · 9354 阅读 · 5 评论