Sxl Blog

Thinking will not overcome fear but action will.

如何正确避免NullPointerException

NullPointerException | 基本功修炼

如何正确避免NullPointerException 我们常说的代码健壮性,很多时候就是对各种异常情况的处理,比如数据的格式、数据的类型、非法输入、空指针等。前几种异常我们可以简单地通过JSR-303(Valid、Validation)来进行处理,而空指针是我们最常见、也最容易忽略的问题。作者也在实际开发中写出过很多NPE,痛定思痛决定水一篇博客出来记录一下。。 首先,空指针的场景我...

CompletableFuture入门指南

Future与CompletableFuture | API | 与Reactor对比

CompletableFuture Why not Future 首先,我们使用异步的场景最终都是通过传递Runnable或Callable对象。当我们传递Callable时有时会期望获取它的返回值,以用于我们接下来操作的执行。在以前,我们都是通过Future来管理我们的task,使用get()方法等待其返回结果,如下: public static void main(String...

使用Spring AOP修改方案入参实践

使用Spring AOP修改方案入参实践

使用Spring AOP修改方案入参实践 业务需求是这样的:运营后台的新增/修改操作需要记录操作人,项目的session处理是全局持有一个userId来保持会话信息。这样会造成一个问题:想获取处理人信息时,需要通过userId获取到用户信息,再返回用户信息中的name作为操作人名称。每次都这样取很啰嗦(不太geek),所以预设优化方案如下: 由于用户信息(尤其是姓名)是基本不会...

Dubbo超时与重试

Dubbo超时与重试策略探究

Dubbo超时与重试 Dubbo提供了多种配置方式:XML、properties、spring-boot-starter,下面均以starter方式进行演示。 超时策略 由于dubbo分为Provider和Consumer,其各自维护了一套超时策略,以dubbo.provider.timeout和dubbo.consumer.timeout表示。 有一个可能会疑惑的点是:...

Redis序列化学习

Redis序列化学习

Redis序列化学习 1.为什么需要对Redis实现自定义序列化 首先看一下Spring对Spring Data Redis序列化器给出的解释: 从框架的角度来看,Redis中存储的数据仅为字节。虽然Redis本身支持各种类型,但在大多数情况下,它们是指数据的存储方式,而不是其表示的内容。由用户决定是否将信息转换为字符串或任何其他对象。 其中包括JdkSerializati...

MyBatis缓存机制

MyBatis一级二级缓存学习

MyBatis缓存机制 源码的简单解读 SqlSession:对外提供了用户和数据库之间交互需要的所有方法,隐藏了底层的细节。默认实现类是DefaultSqlSession Executor:SqlSession向用户提供操作数据库的方法,但和数据库操作有关的职责都会委托给Executor BaseExecutor:BaseExecutor是一个实现了...

Dubbo+Zookeeper脚手架搭建

Dubbo+Zookeeper脚手架搭建

Dubbo+Zookeeper脚手架 近期新项目更改为使用dubbo+zookeeper搭建分布式服务,搭建完后进行记录。 1.本地使用zookeeper搭建单机注册中心 下载:zookeeper下载传送门👉 解压完成后,复制conf目录下的zoo_sample.cfg,创建一个zoo.cfg,并配置如下: tickTime=2000 in...

MyBatis多参数绑定的另一种方式

不同的MyBatis的多参数绑定

MyBatis多参数绑定的另一种方式 传统使用MyBatis进行多参数绑定时,要对所有的参数建立绑定关系。 如今,使用Java8的-parameters参数,使Mapper代码更加简洁。 传统的多参数绑定 举一个项目中的不恰当的例子(正确做法是将多个参数封装为实体): int updateAccountDetails(@Param("insid") String i...

Spring Boot单元测试

Spring Boot进行单元测试

Spring Boot进行单元测试 准备工作 引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>...

Lambda学习

Lambda学习

Lambda学习 Lambda表达式为Java添加了缺失的函数式编程特点,使我们能将函数当作一等公民看待。尽管不完全正确,我们很快就会见识到Lambda与闭包的不同之处,但是又无限地接近闭包。在支持一类函数的语言中,Lambda表达式的类型将是函数。但是在Java中,Lambda表达式是对象,他们必须依附于一类特别的对象类型——函数式接口。 表达式简介 Lambda表达式通...