SpringBoot解决多个定时任务阻塞问题

为什么Spring Boot 定时任务是单线程的?

想要解释为什么,一定要从源码入手,直接从@EnableScheduling这个注解入手,找到了这个ScheduledTaskRegistrar类,其中有一段代码如下:

1
2
3
4
5
6
protected void scheduleTasks() {
  if (this.taskScheduler == null) {
   this.localExecutor = Executors.newSingleThreadScheduledExecutor();
   this.taskScheduler = new ConcurrentTaskScheduler(this.localExecutor);
  }
}

如果taskScheduler为null,则创建单线程的线程池:Executors.newSingleThreadScheduledExecutor()
也就是说线程调度器设置只有一个线程容量,如果存在多个任务被触发时,会等第一个任务执行完毕才会执行下一个任务。

Read More

通过docker容器启动jar包详解

1 缘起与目的

在我刚实习的时候,老程序猿们通过docker容器优雅的启停jar包、查看日志等骚操作深深的的震撼了我,现在我们来探究一番他们是怎么部署docker容器jar包应用的。

本次教程想要实现的目标效果如下:

  1. 使用docker容器启停jar包
  2. 能通过docker logs查看日志
  3. 替换jar包不用容器拷贝,直接放到宿主机指定目录,重启容器即可
  4. log日志可以从宿主机直接访问
  5. 最好能在启动时指定jar包使用哪个yml文件

Read More

浅析领域驱动模型VO、DTO、BO、PO 等的概念、区别及其用法

名词解释

领域模型中的实体类分为四种模型:VO、DTO、DO和PO,各种实体类用于不同业务层次间的交互,并会在层次内实现实体类之间的转化。新项目使用了新的框架和开发规范,特意集体讨论了DTO,DO,VO,BO,POJO,PO和Entity以及DAO、Model和View的基本概念和使用场景,为了深入理解,这里整理为一篇笔记。

Read More