0%

单例模式在开发中会经常用到,那么如何实现一个优雅的单例就显的尤为重要.在实现的时候,我们需要根据具体情况考量如下信息:

  • 是否需要线程安全?
  • 是否需要懒加载?
Read more »

init config

1
2
3
4
5
6
$ git config  --global user.name lazycece
$ git config --global user.email lazycece@gmail.com
$ git config --global color.ui auto
$ git config --global color.status auto
$ git config --global color.branch auto
$ git config --global color.diff auto
Read more »

BsonUndefined 转换问题

关于这个问题的出现,是在业务中使用存储函数时,如果某个字段值为null,存入到数据库中会出现undefined,而随后查询会抛出ConverterNotFoundException异常信息,如下所示:

1
org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [org.bson.BsonUndefined] to type [java.lang.Integer]
Read more »

文件上传是一个很常见的功能,在业务场景中其又可分为单文件上传、分片上传、断点续传、秒传等。

一个小文件上传在一个http连接便可以很快的完成,其无需担心上传失败重新上传的问题。而一个大文件的上传则不能这样,试想一个场景:10G的文件直接上传,如果上传一方的网速很好,服务器的网络带宽很小,那么服务器的带宽全被这个上传连接占用,其他人上传文件则已没有带宽可用;如果在网速较差的环境下上传,快要上传完成的时候网络中断,又得重新上传,一定会抓狂。

Read more »

这里以 ubuntu18.04 LTS 系统为例

查看系统内核版本:

1
uname -a

查看已安装内核信息,确认需要安装的相应包:

1
sudo dpkg --get-selections |grep linux
Read more »

顾名思义,ThreadLocal是为线程提供私有的局部变量。它不同于其他常规的变量,需要使用自身的getset方法来获取和设置值。ThreadLocal的典型应用是在类中被申明为静态变量,用于关联用户ID、事务ID,亦或者其他需要线程独有的属性。

对于ThreadLocal,只要该线程处于活动状态并且ThreadLocal实例是可访问的,每个线程都保留对其本地线程副本的隐式引用。如果线程消失后,其所有副本线程本地实例便会受到垃圾回收(除非其他情况,即线程外存在对这些副本的引用)。

Read more »

rocketmq支持有序的发送消息,有序的消费消息,这里便来看一下如何实现?

实战方面均以RocketMQTemplate形式展现,集成方案详见《springboot中rocketmq的集成与使用》

消息的有序发送方面,我们可以直接使用syncSendOrderly(同步有序发送)和asyncSendOrderly(异步有序发送)两种类型的方法进行发送消息,他们的区别就如命名一样是同步和异步的区别。

Read more »

行为的触发时机

消费者消费偏移位置的持久化是消费客户端的行为,是在client启动的时候设定的一个定时任务,如下所示:

1
2
3
4
5
6
7
8
9
10
11
this.scheduledExecutorService.scheduleAtFixedRate(new Runnable() {

@Override
public void run() {
try {
MQClientInstance.this.persistAllConsumerOffset();
} catch (Exception e) {
log.error("ScheduledTask persistAllConsumerOffset exception", e);
}
}
}, 1000 * 10, this.clientConfig.getPersistConsumerOffsetInterval(), TimeUnit.MILLISECONDS);
Read more »