2020-03-30 04:49:43 登录注册 RSS

当前位置: 公理网 >> 显明公道 >> 基于SpringBoot的后台定时任务与异步调用

基于SpringBoot的后台定时任务与异步调用
发布时间:02-17| 来源:公理网 | 点击发表评论

定时任务?就是在后台按照我们设定的时间和频率?来开启线程执行?我们定义好的相关代码。

比如:定时分析器,定时统计器,定时发送邮件等等

那么基于SpringBoot我们如何开发,下面介绍最简单快速的方法

先简单了解几个注解:

@Scheduled:定时任务的配置

@Async:异步执行

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

@EnableAsync:开启异步事件的支持
〇、同步定时任务。先上个完整的代码
下面是springboot?的启动程序(@EnableScheduling使@Scheduled注解生效)

@EnableScheduling//开启对定时任务的支持@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})publicclassWebApplication{publicstaticvoidmain(String[]args){SpringApplication.run(WebApplication.class,args);}}
importorg.springframework.scheduling.annotation.Async;importorg.springframework.scheduling.annotation.Scheduled;importorg.springframework.stereotype.Component;/***@ClassName:Schedule1*@Description:任务*@AuthorTan*@Date2019/7/5*/@ComponentpublicclassSchedule1{//corn从左到右(用空格隔开):秒分小时月份中的日期月份星期中的日期年份@Scheduled(cron="0/5*****")publicvoidcalculate1(){System.out.println("定时任务1执行开始!");System.out.println("这里是定时任务1执行的内容。。。。。。");System.out.println("定时任务1执行成功!");}@Scheduled(cron="0/5*****")publicvoidcalculate2(){System.out.println("定时任务2执行开始!");System.out.println("这里是定时任务2执行的内容。。。。。。");System.out.println("定时任务2执行成功!");}}这样,一个简单的定时任务就完成了。但是,这样每个Scheduled方法是同步执行的,万一有一个发生死锁,那么其他任务就没法执行,下面介绍异步定时任务
?
一、异步定时任务
Spring为任务调度与异步方法执行提供了注解支持,即通过在方法上设置@Async注解,可使得方法被异步调用。

异步调用的实现就是交给Spring的TaskExecutor来完成。

而这个TaskExecutor我们可以自定义
1、配置文件application.properties
20190708134515997.png"width="255"/>

加上内容:

corePoolSize=10maxPoolSize=50queueCapacity=102、添加线程池配置
importorg.springframework.beans.factory.annotation.Value;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.context.annotation.PropertySource;importorg.springframework.scheduling.annotation.EnableAsync;importorg.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;importjava.util.concurrent.Executor;/***注解式配置文件**@ClassName:AsyncConfig*@Description:TODO*@AuthorTan*@Date2019/7/5*/@Configuration//表明该类是一个配置类@EnableAsync//开启异步事件的支持@PropertySource(value="classpath:application.properties")publicclassAsyncConfig{/***线程池维护线程的最少数量*/@Value("${corePoolSize}")privateintcorePoolSize;/***线程池维护线程的最大数量*/@Value("${corePoolSize}")privateintmaxPoolSize;/***缓存队列*/@Value("${corePoolSize}")privateintqueueCapacity;@BeanpublicExecutortaskExecutor(){ThreadPoolTaskExecutorexecutor=newThreadPoolTaskExecutor();executor.setCorePoolSize(corePoolSize);executor.setMaxPoolSize(maxPoolSize);executor.setQueueCapacity(queueCapacity);executor.initialize();returnexecutor;}}3、然后跟之前一样
启动类【多了@EnableAsync】

@EnableAsync//使Async生效@EnableScheduling//开启对定时任务的支持@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})publicclassWebApplication{publicstaticvoidmain(String[]args){SpringApplication.run(WebApplication.class,args);}}
任务类【每个方法加上注解@Async,如果加到类上,表明所有方法都异步执行】

importorg.springframework.scheduling.annotation.Async;importorg.springframework.scheduling.annotation.Scheduled;importorg.springframework.stereotype.Component;/***@ClassName:Schedule1*@Description:任务*@AuthorTan*@Date2019/7/5*/@ComponentpublicclassSchedule1{@Async//corn从左到右(用空格隔开):秒分小时月份中的日期月份星期中的日期年份@Scheduled(cron="0/5*****")publicvoidcalculate1(){System.out.println("定时任务1执行开始!");System.out.println("这里是定时任务1执行的内容。。。。。。");System.out.println("定时任务1执行成功!");}@[email protected](cron="0/5*****")publicvoidcalculate2(){System.out.println("定时任务2执行开始!");System.out.println("这里是定时任务2执行的内容。。。。。。");System.out.println("定时任务2执行成功!");}}二、一些说明
上面两个例子基本满足我们对定时任务的开发需求

?
点赞
收藏
分享

授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!

授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。

107876/article/details/98849664"}'target="_blank"href="https://blog.csdn.net/zhan107876/article/details/98849664">zabbix离线安装,环境:Cen...
107876"target="_blank">zhan107876:[reply]weixin_45938384[/reply]
可能是操作系统环境导致,不同的操作系统或者不同的安装操作系统的方式可能造成携带的基础软件不一样。。最保守的办法是装操作系统的时候勾丫开发工具】

最新新闻

手机浏览

公理网 版权所有

公理网 Total 0.063785(s) query 6, 报料QQ:点击这里

给我发消息