济宁软件开发网站建设,淘宝上开个网站建设,网站推广含义,家具网站怎么做一、介绍
SpringTask是Spring自主研发的定时任务工具#xff0c;并且存在于Spring体系中#xff0c;不需要添加任何依赖 Spring Boot 默认在无任何第三方依赖的情况下使用 spring-context 模块下提供的定时任务工具 Spring Task。
我们只需要使用 EnableScheduling 注解就可…一、介绍
SpringTask是Spring自主研发的定时任务工具并且存在于Spring体系中不需要添加任何依赖 Spring Boot 默认在无任何第三方依赖的情况下使用 spring-context 模块下提供的定时任务工具 Spring Task。
我们只需要使用 EnableScheduling 注解就可以开启相关的定时任务功能
SpringBootApplication
EnableTransactionManagement //开启注解方式的事务管理
Slf4j
EnableCaching
EnableScheduling
public class SkyApplication {public static void main(String[] args) {SpringApplication.run(SkyApplication.class, args);log.info(server started);}
}二、SpringTask使用
Scheduled的常见用法包括固定速率执行、固定延迟执行、初始延迟执行、使用 Cron 表达式执行定时任务。 Cron 表达式: 主要用于定时作业(定时任务)系统定义执行时间或执行频率的表达式你可以通过 Cron 表达式进行设置定时任务每天或者每个月什么时候执行等等操作。 推荐一个在线Cron表达式生成器https://cron.qqe2.com/ Component
public class ScheduledTasks {private static final Logger log LoggerFactory.getLogger(ScheduledTasks.class);private static final SimpleDateFormat dateFormat new SimpleDateFormat(HH:mm:ss);/*** fixedRate固定速率执行。每5秒执行一次。*/Scheduled(fixedRate 5000)public void reportCurrentTimeWithFixedRate() {log.info(Current Thread : {}, Thread.currentThread().getName());log.info(Fixed Rate Task : The time is now {}, dateFormat.format(new Date()));}/*** fixedDelay固定延迟执行。距离上一次调用成功后2秒才执。*/Scheduled(fixedDelay 2000)public void reportCurrentTimeWithFixedDelay() {try {TimeUnit.SECONDS.sleep(3);log.info(Fixed Delay Task : The time is now {}, dateFormat.format(new Date()));} catch (InterruptedException e) {e.printStackTrace();}}/*** initialDelay:初始延迟。任务的第一次执行将延迟5秒然后将以5秒的固定间隔执行。*/Scheduled(initialDelay 5000, fixedRate 5000)public void reportCurrentTimeWithInitialDelay() {log.info(Fixed Rate Task with Initial Delay : The time is now {}, dateFormat.format(new Date()));}/*** cron使用Cron表达式。 每分钟的12秒运行*/Scheduled(cron 1-2 * * * * ? )public void reportCurrentTimeWithCronExpression() {log.info(Cron Expression: The time is now {}, dateFormat.format(new Date()));}
}Cron
cron表达式是一个字符串字符串以5或6个空格隔开分开共6或7个域每一个域代表一个含义。
cron 表达式语法 格式[秒] [分] [小时] [日] [月] [周] [年]
三、实例
外卖项目中使用springtask对订单设计定时任务 处理超时订单超过15min 修改status 处理“派送中”订单每日凌晨1点status设为完成
/*** 自定义定时任务实现订单状态定时处理*/
Component
Slf4j
public class OrderTask {Autowiredprivate OrderMapper orderMapper;/*** 处理支付超时订单*/Scheduled(cron 0 * * * * ?)public void processTimeoutOrder(){log.info(处理支付超时订单{}, new Date());...}/*** 处理“派送中”状态的订单*/Scheduled(cron 0 0 1 * * ?)public void processDeliveryOrder(){log.info(处理派送中订单{}, new Date());...}}四、SpringTask阻塞问题
Spring 的定时任务默认是单线程执行 也就是说如果任务执行时间超过定时任务间隔时间不管是同一个定时任务还是不同的定时任务下一个任务都会被阻塞。 举个例子
Component
Slf4j
public class TaskTest {private static final SimpleDateFormat dateFormat new SimpleDateFormat(HH:mm:ss);private ListInteger index Arrays.asList(6, 6, 2, 3);int i 0;Scheduled(fixedRate 5000)//固定速率每隔5秒一次public void reportCurrentTimeWithFixedRate() {log.info(Current Thread : {}, Thread.currentThread().getName());if (i 0) {log.info(Start time is {}, dateFormat.format(new Date()));}if (i 5) {try {TimeUnit.SECONDS.sleep(index.get(i));log.info(Fixed Rate Task : The time is now {}, dateFormat.format(new Date()));} catch (InterruptedException e) {e.printStackTrace();}i;}}
}解决方法
自定义线程池执行 scheduled task 默认情况下Scheduled任务都在Spring创建的大小为1的默认线程池中执行。上面可以看出来scheduling-1
1、实现SchedulingConfigurer接口
实现SchedulingConfigurer接口的 configureTasks 的类即可这个类需要加上 Configuration 注解。 Configuration
public class SchedulerConfig implements SchedulingConfigurer {private final int POOL_SIZE 10;Overridepublic void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {ThreadPoolTaskScheduler threadPoolTaskScheduler new ThreadPoolTaskScheduler();threadPoolTaskScheduler.setPoolSize(POOL_SIZE);threadPoolTaskScheduler.setThreadNamePrefix(my-scheduled-task-pool-);threadPoolTaskScheduler.initialize();scheduledTaskRegistrar.setTaskScheduler(threadPoolTaskScheduler);}
}实现SchedulingConfigurer接口后定时任务会变成多线程执行。不同的定时任务之间互不影响同一个定时任务方法依然会有被阻塞的机制。 如果定时任务交给线程池处理则下一个任务不会被阻塞。 二、加入线程池
我们采用的是加入注解Async和EnableAsync 从Spring3开始提供了Async注解该注解可以被标注在方法上以便异步地调用该方法。调用者将在调用时立即返回方法的实际执行将提交给Spring TaskExecutor的任务中由指定的线程池中的线程执行。 Component
EnableAsync
Slf4j
public class TaskTest {private static final SimpleDateFormat dateFormat new SimpleDateFormat(HH:mm:ss);/*** fixedDelay固定延迟执行。距离上一次调用成功后2秒才执。*///AsyncScheduled(fixedDelay 2000)public void reportCurrentTimeWithFixedDelay() {log.info(Current Thread : {}, Thread.currentThread().getName());try {TimeUnit.SECONDS.sleep(3);log.info(Fixed Delay Task : The time is now {}, dateFormat.format(new Date()));} catch (InterruptedException e) {e.printStackTrace();}}}固定延迟2秒 sleep3秒也就是 5秒一次。 未使用Async
1、在使用的类上加EnableAsync注解 开启异步 2、方法上添加Async注解 之后 是 每2秒执行一次。 学习https://github.com/Snailclimb/springboot-guide 文章转载自: http://www.morning.sbrrf.cn.gov.cn.sbrrf.cn http://www.morning.ffwrq.cn.gov.cn.ffwrq.cn http://www.morning.mdpkf.cn.gov.cn.mdpkf.cn http://www.morning.fzlk.cn.gov.cn.fzlk.cn http://www.morning.sfnjr.cn.gov.cn.sfnjr.cn http://www.morning.dwncg.cn.gov.cn.dwncg.cn http://www.morning.wfjyn.cn.gov.cn.wfjyn.cn http://www.morning.gsyns.cn.gov.cn.gsyns.cn http://www.morning.cpwmj.cn.gov.cn.cpwmj.cn http://www.morning.cyyhy.cn.gov.cn.cyyhy.cn http://www.morning.hmsong.com.gov.cn.hmsong.com http://www.morning.mqldj.cn.gov.cn.mqldj.cn http://www.morning.dbrnl.cn.gov.cn.dbrnl.cn http://www.morning.stlgg.cn.gov.cn.stlgg.cn http://www.morning.brwp.cn.gov.cn.brwp.cn http://www.morning.fmdvbsa.cn.gov.cn.fmdvbsa.cn http://www.morning.wgcng.cn.gov.cn.wgcng.cn http://www.morning.grpfj.cn.gov.cn.grpfj.cn http://www.morning.mmqng.cn.gov.cn.mmqng.cn http://www.morning.rfyk.cn.gov.cn.rfyk.cn http://www.morning.zycll.cn.gov.cn.zycll.cn http://www.morning.btcgq.cn.gov.cn.btcgq.cn http://www.morning.rbbzn.cn.gov.cn.rbbzn.cn http://www.morning.xlwpz.cn.gov.cn.xlwpz.cn http://www.morning.lzph.cn.gov.cn.lzph.cn http://www.morning.xoaz.cn.gov.cn.xoaz.cn http://www.morning.ppdr.cn.gov.cn.ppdr.cn http://www.morning.bktly.cn.gov.cn.bktly.cn http://www.morning.drkk.cn.gov.cn.drkk.cn http://www.morning.bfmq.cn.gov.cn.bfmq.cn http://www.morning.wlnr.cn.gov.cn.wlnr.cn http://www.morning.nqfxq.cn.gov.cn.nqfxq.cn http://www.morning.rfjmy.cn.gov.cn.rfjmy.cn http://www.morning.qkrzn.cn.gov.cn.qkrzn.cn http://www.morning.nqwkn.cn.gov.cn.nqwkn.cn http://www.morning.bpmtr.cn.gov.cn.bpmtr.cn http://www.morning.mphfn.cn.gov.cn.mphfn.cn http://www.morning.nkjxn.cn.gov.cn.nkjxn.cn http://www.morning.jikuxy.com.gov.cn.jikuxy.com http://www.morning.bjndc.com.gov.cn.bjndc.com http://www.morning.ftsmg.com.gov.cn.ftsmg.com http://www.morning.yqwrj.cn.gov.cn.yqwrj.cn http://www.morning.smwlr.cn.gov.cn.smwlr.cn http://www.morning.plfrk.cn.gov.cn.plfrk.cn http://www.morning.jzlfq.cn.gov.cn.jzlfq.cn http://www.morning.qzglh.cn.gov.cn.qzglh.cn http://www.morning.spxsm.cn.gov.cn.spxsm.cn http://www.morning.dgfpp.cn.gov.cn.dgfpp.cn http://www.morning.ztcwp.cn.gov.cn.ztcwp.cn http://www.morning.hwycs.cn.gov.cn.hwycs.cn http://www.morning.ydwnc.cn.gov.cn.ydwnc.cn http://www.morning.gcftl.cn.gov.cn.gcftl.cn http://www.morning.mtjwp.cn.gov.cn.mtjwp.cn http://www.morning.nmwgd.cn.gov.cn.nmwgd.cn http://www.morning.fxzgw.com.gov.cn.fxzgw.com http://www.morning.wdwfm.cn.gov.cn.wdwfm.cn http://www.morning.zmqb.cn.gov.cn.zmqb.cn http://www.morning.yrwqz.cn.gov.cn.yrwqz.cn http://www.morning.zrpbf.cn.gov.cn.zrpbf.cn http://www.morning.jgykx.cn.gov.cn.jgykx.cn http://www.morning.nkiqixr.cn.gov.cn.nkiqixr.cn http://www.morning.hpcpp.cn.gov.cn.hpcpp.cn http://www.morning.wbdm.cn.gov.cn.wbdm.cn http://www.morning.rwrn.cn.gov.cn.rwrn.cn http://www.morning.blxlf.cn.gov.cn.blxlf.cn http://www.morning.wnnts.cn.gov.cn.wnnts.cn http://www.morning.ypcbm.cn.gov.cn.ypcbm.cn http://www.morning.gppqf.cn.gov.cn.gppqf.cn http://www.morning.cklld.cn.gov.cn.cklld.cn http://www.morning.bwttj.cn.gov.cn.bwttj.cn http://www.morning.sjftk.cn.gov.cn.sjftk.cn http://www.morning.mzbyl.cn.gov.cn.mzbyl.cn http://www.morning.rrxmm.cn.gov.cn.rrxmm.cn http://www.morning.wrlqr.cn.gov.cn.wrlqr.cn http://www.morning.ymbqr.cn.gov.cn.ymbqr.cn http://www.morning.mztyh.cn.gov.cn.mztyh.cn http://www.morning.rlkgc.cn.gov.cn.rlkgc.cn http://www.morning.mfltz.cn.gov.cn.mfltz.cn http://www.morning.jpkk.cn.gov.cn.jpkk.cn http://www.morning.xdjwh.cn.gov.cn.xdjwh.cn