0%

结论

定时任务是单线程执行的,默认一个时间段只能执行一个定时任务

如果多个定时任务同时执行的话,那么会按照顺序执行

代码

在启动类中加上以下代码

1
2
3
4
5
6
7
8
//创建定时任务线程池
@Bean
public TaskScheduler taskScheduler() {
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
//线程池可根据实际情况调整
taskScheduler.setPoolSize(64);
return taskScheduler;
}

测试

用例一

一个Job,两个任务

task1每5s执行一次,每次执行耗时10s

task2每5s执行一次,每次执行耗时10s

代码

结果

用例二

两个Job,每个Job中各一个任务

task1每5s执行一次,每次执行耗时10s

task3每7s执行一次,每次执行耗时10s

代码

结果

用例三

一个Job,两个任务

task1每5s执行一次,每次执行耗时10s

task2每7s执行一次,每次执行耗时10s

代码

结果

另一种方案

使用@Async注解实现异步任务

注意:需启动类配合加上 @EnableAsync才会生效

同一个task也不会阻塞,不建议使用

代码

结果

操作步骤

一、关闭MongoDB

运行–>services.msc–>找到MongoDB服务–>停止服务

二、找到配置文件mongod.cfg

三、找到数据文件路径

四、迁移数据文件

复制data目录到目标磁盘

五、修改配置文件

六、启动MongoDB

运行—>services.msc,找到MongoDB服务,启动

文件切割 - split

在 Linux 系统下使用 split命令进行大文件切割很方便

阅读全文 »

dubbo的连接机制

这里直接上结论了,dubbo默认是使用单一长连接,即消费者与每个服务提供者建立一个单一长连接,即如果有消费者soa-user1,soa-user2,提供者soa-account三台,则每台消费者user都会与3台account建立一个连接,结果是每台消费者user有3个长连接到分别到3台提供者,每台提供者account维持到soa-user1和soa-user2的2个长连接。

阅读全文 »

前言

谈到RPC肯定绕不开TCP通信,而主流的RPC框架都依赖于Netty等通信框架,这时候我们还要考虑是使用长连接还是短连接:

  • 短连接:每次通信结束后关闭连接,下次通信需要重新创建连接;优点就是无需管理连接,无需保活连接;
  • 长连接:每次通信结束不关闭连接,连接可以复用,保证了性能;缺点就是连接需要统一管理,并且需要保活;

主流的RPC框架都会追求性能选择使用长连接,所以如何保活连接就是一个重要的话题,也是本文的主题,下面会重点介绍一些保活策略;

阅读全文 »