千家信息网

spring boot的多线程并发定时任务是什么

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,spring boot的多线程并发定时任务是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。spring-boot |
千家信息网最后更新 2026年11月01日spring boot的多线程并发定时任务是什么

spring boot的多线程并发定时任务是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

spring-boot | 多线程并发定时任务

刚刚看了下Spring Boot实现定时任务的文章,感觉还不错。Spring Boot 使用Spring自带的Schedule来实现定时任务变得非常简单和方便。在这里个大家分享下。

开启缓存注解

@SpringBootApplication@EnableScheduling //开启定时任务public class Application {    public static void main(String[] args) {       SpringApplication.run(Application.class, args);    }}

编写定时任务

[@Component](https://my.oschina.net/u/3907912)public class ScheduledTasks {    private Logger logger = LoggerFactory.getLogger(ScheduledTasks.class);    // cron接受cron表达式,根据cron表达式确定定时规则    @Scheduled(cron="0/5 * * * * ? ")   //每5秒执行一次     public void testCron() {         DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");              logger.info(sdf.format(new Date())+"*********每5秒执行一次");    }}

任务完成

启动项目,查看控制台打印信息,发现定时任务已经生效。spring boot 和Scheduled整合完毕。


存在问题

但是后来发现个问题,通过同时测试几个任务发现,所有的任务都是在同一个线程池中的同一个线程来完成的。在实际开发过程中,我们当然不希望所有的任务都运行在一个线程中。

@Scheduled(cron="0/1 * * * * ? ")   //每1秒执行一次 public void testCron1() {   DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");      logger.info(sdf.format(new Date())+"*********每1秒执行一次");}@Scheduled(cron="0/2 * * * * ? ")   //每2秒执行一次 public void testCron2() {   DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");      logger.info(sdf.format(new Date())+"*********每2秒执行一次");}@Scheduled(cron="0/3 * * * * ? ")   //每3秒执行一次 public void testCron3() {   DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");      logger.info(sdf.format(new Date())+"*********每3秒执行一次");}@Scheduled(cron="0/4 * * * * ? ")   //每4秒执行一次 public void testCron4() {   DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");      logger.info(sdf.format(new Date())+"*********每4秒执行一次");}


解决方案

那么,怎么设计成多线程实现并发呢?在网上看到过这样的解决方案。通过ScheduleConfig配置文件实现SchedulingConfigurer接口,并重写setSchedulerfang方法,我们尝试着配置了一下。

@Configurationpublic class ScheduleConfig implements SchedulingConfigurer {        @Override        public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {                    taskRegistrar.setScheduler(Executors.newScheduledThreadPool(5));        }}

整合成功

这样就完成了多线程并发的配置?我们启动项目通过控制台输出信息验证一下结果,最后发现所有的任务都在同一个线程池但不同线程中完成,说明这个方案完全可行,这样,我们就完成了spring boot 多线程并发定时任务。


注

@Scheduled所支持的参数:

1.cron:cron表达式,指定任务在特定时间执行; 2.fixedDelay:表示上一次任务执行完成后多久再次执行,参数类型为long,单位ms; 3.fixedDelayString:与fixedDelay含义一样,只是参数类型变为String; 4.fixedRate:表示按一定的频率执行任务,参数类型为long,单位ms; 5.fixedRateString: 与fixedRate的含义一样,只是将参数类型变为String; 6.initialDelay:表示延迟多久再第一次执行任务,参数类型为long,单位ms; 7.initialDelayString:与initialDelay的含义一样,只是将参数类型变为String; 8.zone:时区,默认为当前时区,一般没有用到。

Cron表达式范例:

每隔5秒执行一次:*/5 * * * * ? 每隔1分钟执行一次:0 */1 * * * ? 每天23点执行一次:0 0 23 * * ? 每天凌晨1点执行一次:0 0 1 * * ? 每月1号凌晨1点执行一次:0 0 1 1 * ? 每月最后一天23点执行一次:0 0 23 L * ? 每周星期天凌晨1点实行一次:0 0 1 ? * L 在26分、29分、33分执行一次:0 26,29,33 * * * ? 每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?

其实不会Cron表达式也不用担心,网上有好多在线Cron生成器,我们完全可以通过在线生成器生成符合要求的cron,也很方便。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

任务 线程 参数 类型 表达式 单位 只是 含义 方案 生成 配置 信息 控制台 文章 时区 生成器 解决方案 问题 项目 在线 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 哈尔滨大商圈互联网科技有限公司 互联网与科技金融数据 互联网医疗科技 互联网科技公司发展 中国 科技 互联网 互联网科技集团 西安互联网科技 奇酷互联网络科技公司 广西互联网科技公司 长亮科技互联网金融 互联网科技生活的内容 无锡溥仪互联网科技有限公司 老年人脱离互联网科技的作文 银川新华互联网科技学校地址 重庆威客帮互联网科技 移动互联网年度科技创新 互联网科技大赛获奖感言 21世纪互联网科技成就 九思连强互联网电子科技有限公司 福仕德教育科技互联网 互联网络科技 上海致骋互联网科技 四个字互联网科技公司取名 互联网实体化科技化 彤创互联网科技有限公司 西安小鹰速贷互联网科技有限公司 高科技互联网发展前景如何 互联网科技职业技能培训学校 杭州融税互联网科技有限公司 数字科技和互联网金融哪个好
0