千家信息网

SpringBoot中配置定时任务及线程池和多线程池执行的方法是怎样的

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

SpringBoot中配置定时任务及线程池和多线程池执行的方法是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

配置基础的定时任务

最基本的配置方法,而且这样配置定时任务是单线程串行执行的,也就是说每次只能有一个定时任务可以执行,可以试着声明两个方法,在方法内写一个死循环,会发现一直卡在一个任务上不动,另一个也没有执行。

1、启动类

添加@EnableScheduling开启对定时任务的支持

@EnableScheduling@SpringBootApplicationpublic class TestScheduledApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(this.getClass()); } public static void main(String[] args) { new SpringApplicationBuilder(TestScheduledApplication.class).web(true).run(args); }}

2、配置执行定时任务的类

添加@Component扫描本类,在方法上添加@Scheduled注解声明定时任务,配置时间周期

@Componentpublic class TestTask1 { private static final Logger logger = LogManager.getLogger(); // 间隔1秒执行一次 @Scheduled(cron = "0/1 * * * * ?") public void method1() { logger.info("----------method1 start----------"); logger.info("----------method1 end----------"); }}

配置线程池执行定时任务

因为有时候需要执行的定时任务会很多,如果是串行执行会带来一些问题,比如一个很耗时的任务阻塞住了,一些需要短周期循环执行的任务也会卡住,所以可以配置一个线程池来并行执行定时任务

1、配置线程池

添加@EnableAsync开启对异步的支持

@Configuration@EnableAsyncpublic class ExecutorConfig { @Bean public Executor executor1() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setThreadNamePrefix("test-schedule2-"); executor.setMaxPoolSize(20); executor.setCorePoolSize(15); executor.setQueueCapacity(0); executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); return executor; }}

2、配置定时任务异步执行

添加@Async注解,表示该定时任务是异步执行的,因为上面线程池配置了名字,所以可以看到打印的日志是该线程池中的线程在执行任务,如果没有配置线程池的话会默认使用SimpleAsyncTaskExecutor,这个异步执行器每次都会开启一个子线程执行,性能消耗比较大,所以最好是自己配置线程池

@Async@Scheduled(cron = "0/1 * * * * ?")public void method1() { logger.info("----------method1 start----------"); logger.info("----------method1 end----------");}

配置多个线程池分别执行不同的定时任务

因为有些定时任务是比较重要的,有些则是不太重要的,想把定时任务分别放到不同的线程池中,也是可以实现的。

1、配置多个线程池

分别配置两个线程池

@Configuration@EnableAsyncpublic class ExecutorConfig1 { @Bean public Executor executor1() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setThreadNamePrefix("test-schedule1-"); executor.setMaxPoolSize(20); executor.setCorePoolSize(15); executor.setQueueCapacity(0); executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); return executor; } @Bean public Executor executor2() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setThreadNamePrefix("test-schedule2-"); executor.setMaxPoolSize(20); executor.setCorePoolSize(15); executor.setQueueCapacity(0); executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); return executor; }}

2、定时任务显示指定调用线程池

因为上面在配置类里面初始化了两个线程池,所以会有两个线程池分别叫executor1和executor1被生成放到容器中,因为@Bean注解生成的对象默认就是和方法名相同的名字,而@Async注解是可以指定使用哪个线程池的。这样就可以在不同的线程池中执行不同的定时任务了

// 间隔1秒执行一次@Async("executor1")@Scheduled(cron = "0/1 * * * * ?")public void method1() { logger.info("----------method1 start----------"); logger.info("----------method1 end----------");}// 间隔1秒执行一次@Scheduled(cron = "0/1 * * * * ?")@Async("executor2")public void method2() { logger.info("----------method2 start----------"); logger.info("----------method2 end----------");}

注意:

  1. 没有配置自己的线程池时,会默认使用SimpleAsyncTaskExecutor。 如果项目中只配置了一个线程池,那么不需要显示指定使用这个线程池,spring也会自动使用用户配置的线程池,但是如果配置了多个就必须要显示指定,否则还是会使用默认的。 如果想要指定使用哪个线程池,可以使用@Async("executor2")显示指定。

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

线程 任务 配置 方法 不同 两个 注解 多个 支持 重要 名字 周期 就是 帮助 循环 生成 清楚 相同 个子 内容 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广东万易互联网科技有限公司惠州分公司 中关村互联网 科技集团 深圳恒合互联网络科技有限公司 互联网科技官网 科技互联网龙头 中资互联网科技 狮子座互联网科技 远拓互联网科技 奇士达互联网科技 撒么互联网科技公司 美国互联网前沿科技 华中科技有哪些互联网大佬 江苏南京365互联网科技 成都铂石互联网科技做什么的 互联网公司科技股 互联网科技公司实习生 合肥互联网科技公司公章图片 互联网企业科技类企业如何做账 富国互联网金融科技混合基金 恒生科技指数 中概互联网 江苏根荣互联网科技 互联网金融与金融科技 极限挑战互联网科技 博兴的互联网电子科技公司 西藏七维空间互联网科技有限公司 广州优美互联网科技 开一家科技互联网公司需要多少钱 长沙茂晟互联网科技有限公司 互联网科技平台产品运营 现代科技的标志之一的互联网
0