六道漫步

唯有编程能使我忘记ACG,唯有ACG能使我忘记编程.

springboot bean加载顺序问题

记一次疑难bug解决经历

一次疑难bug解决经历 bug情况 项目是一个spring cloud项目,使用了spring cloud stream组件规范来收发消息,平时http请求使用的是fastjson,但是stream message使用的还是默认的jackson. 而BUG是在发送stream message的时候,本地环境时枚举是序列化为name,而在线上却序列化为code,即线上和线下的序列化行为不一...

参照rocketmq和kafka实现的数据库消息

参照rocketmq和kafka实现的数据库消息

rocketmq、kafka与其他消息队列的最大不同点 ActiveMQ、RabbitMQ等以前的消息队列和rocketmq、kafka两个消息队列的最大不同点在于消息持久化层的定位. 消息队列传统架构 对于ActiveMQ、RabbitMQ等以前的消息队列来说,每一条消息都有且只有一个明确的发送方和一个明确的接收方. 即使是广播模式的消息,实际上每条消息也只有一个接收方,实际上是给每个每...

批量插入的两种含义和效率说明

批量插入的两种含义和效率说明

这篇文章是对”批量插入效率如何“这个常见问题的回答.实际上这个常见问题是非常具有歧义性的. 首先我们都知道插入的意思是将数据写入到数据库中,而数据库的唯一可使用的语言是sql,写入数据属于sql中的dml语句. 当然,大多数时候编程中是不会直接使用sql语句来进行编程的,以java为例,通常不会使用jdbc的方式来操作数据库,而是使用如mybatis、hibernate、spring d...

一次线上内存泄漏问题的排查

与FastjsonHttpMessageConverter有关的内存泄漏问题

与FastjsonHttpMessageConverter有关的内存泄漏问题 (一). 排查经过 1.首先确定有内存泄漏问题的是因为报了这个异常:java.lang.OutOfMemoryError:GC overhead limit exceeded 默认情况下,当应用程序花费超过98%的时间用来做GC并且回收了不到2%的堆内存时,会抛出java.lang.OutOfMemoryError...

SSM中的类型转换、格式化、序列化与反序列化

SSM中的类型转换、格式化、序列化与反序列化

定义与区别 类型转换、格式化、序列化与反序列化三个概念是相似而且经常相关,联系在一起的. 类型转换(convert):将A类型的源对象转换为目标B类型的对象. 格式化(formatter):将一个对象输出为显示的格式或者说容易让人理解的格式.以及把从显示的格式解析为对象. 序列化(serializer)与反序列化(deserializer):序列化是指把对象二进制化数据写入IO...

debug记录:SpringBoot中jackson自动配置失效

项目中有多个MappingJackson2HttpMessageConverter对象导致jackson自动配置失效的一次debug

Spring序列化与反序列化设计探究 在我如上这篇博客中,遇到了对SpringBootMvc环境的项目中,试图使用将Module对象托管给Spring容器托管来达成MappingJackson2HttpMessageConverter对象的自动全局配置. 结果失败,发现在返回的HttpMessageConverter列表中和容器中各自存在一个不同的MappingJackson2HttpM...

Spring序列化与反序列化设计探究

从自定义数据序列化与反序列化格式探究Spring相关设计

一.探究原因和需求概述 最近在项目中遇到了需要在SpringMvc中对枚举类型和java8新时间类型的自定义序列化与反序列化格式的问题. 简单说就是希望作为返回对象的DTO中,对于枚举类型和java8新时间类型的属性,定义为对应的枚举类型和java8新时间类型. 但是由于对接和展示需要或者规范规定,很多时候需要序列化和反序列化时自定义格式.比如说很多人习惯把时间格式定为yyyy-MM-d...

分布式环境中是否允许枚举作为返回值

《阿里巴巴JAVA开发手册》禁止枚举作为返回值的规定的看法

使用枚举作为返回值可能造成的问题其实大家都知道就是客户端和服务端版本不一致的话,会造成反序列化异常. 于是《阿里巴巴JAVA开发手册》对于这个问题的处理办法就采取了尽量避免异常出现,所以禁止定义枚举为返回值. 首先,枚举不作为返回值,那么作为替代品只能是返回code. 那么本地系统收到了一个未定义的code,该怎么处理呢? 想来想去,无非有两种情况: 1.本地系统根本没用到这个...

关于Java Checked Exception机制的思考

读王垠《Kotlin和Checked Exception》引发的思考

一、程序设计语言中的异常机制 一般来说程序设计语言的异常机制主要分为两种,一种是以C语言为代表机制的错误码,一种是异常对象机制(多返回值语言可用多返回值模拟异常对象机制,可视作相同机制). 1.错误码机制 (一)含义 错误码机制主要以C语言为代表. 错误码机制就是指对于一个函数执行时发生的错误情况,使用函数本身的返回值返回事先约定好的特殊值,以此通知函数的调用者发生了异常的情况. 事实上...

debug记录:eclipse违反java8方法引用规范的bug

由一个eclipse bug学习java8方法引用规范

今天,在公司项目中修复一个Bug时遇到了百思不得其解的事情. 事情的起源是测试上报了一个Bug,这个Bug的操作很简单,在测试环境下确实存在,但是在本地的开发环境中无法复现. 于是我首先怀疑开发环境和测试环境的代码版本不同导致了这种事情.但是一系列操作之后,我确认了并不是测试环境与本地开发环境的代码版本区别. 由于服务器上的日志无法准确定位出错位置,显然Bug出在我没有预料的地方.我只...