系统中经常需要调用第三方接口实现业务功能,为了方便调试和定位问题,我们通常需要将接口调用参数和返回结果打印到日志文件中。在Spring项目中一般会用RestTemplate来调用第三方接口。 通过在RestTemplate调用过程中统一打印日志,可以保持代码的整洁,也可以统一日志格式,比在业务逻辑中到处打印接口调用日志要方便的多。 具体的代码参照 示例项目…
在Java 21中,除了推出很多新特性之外,一些Bug修复,也需要注意一下。因为这些改变可能在升级的时候,造成影响。 # Double.toString() 和 Float.toString() 的精度问题修复 比如:对于 Double.String(1e23) : 在Java 19后,输出内容为: 1.0E23 在Java 18中,输出内容为:…
Spring中的BeanFactoryPostProcessor是在Spring容器实例化Bean之后,初始化之前执行的一个扩展机制。它允许开发者在Bean的实例化和初始化之前对BeanDefinition进行修改和处理,从而对Bean的创建过程进行干预和定制化。…
懒加载是Spring框架中的一个重要特性,它允许我们将bean的实例化推迟到第一次使用时。懒加载的主要用途是提高应用程序的启动性能,减少不必要的资源消耗。 一、懒加载的用途…
1. 请简单描述一下 Reactor 模型在 Netty 中的应用。 在Netty-Server 中一般使用的是 Reactor 的 多线程 池模型,而Netty-Client 中一般使用的是 Reactor 单线程池模型。具体来说,NioEventLoopGroup 充当着线程池。每一个 NioEventLoopGroup 中都包含了多个…
NioEventLoopGroup和NioEventLoop 源码 分析 1. NioEventLoopGroup的构造分析 EventLoopGroup parentGroup = new NioEventLoopGroup(); EventLoopGroup childGroup = new NioEventLoopGroup();…
NioEventLoop 任务的执行 今天跟核心方法,关于任务的处理 下面是EventLoop第一次执行execute方法的时候,会触发的逻辑,会执行一个核心Runnable任务,该任务会进行 selector 的选择,然后处理三类任务,以及I/O就绪事件:…
1. 客户端启动 服务端启动已经说完了,接下来看下客户端启动,有了之前的经验,现在看客户端会容易的很多: public class SomeClient { public static void main(String[] args) throws InterruptedException { NioEventLoopGroup group = new…
Channel 的 inBound 与 outBound 处理器 1. 先了解一下相关核心类的API ChannelHandler、ChannelInbound/OutboundHandler…