中山网站制作工具,棋牌推广,手机app安装下载,这些奥运新闻得了中国新闻奖方案一#xff1a;Timer
(1)Timer.schedule(TimerTask task,Date time)安排在制定的时间执行指定的任务。
(2)Timer.schedule(TimerTask task,Date firstTime ,long period)安排指定的任务在指定的时间开始进行重复的固定延迟执行#xff0e;
(3)Timer.schedule(TimerTask…方案一Timer
(1)Timer.schedule(TimerTask task,Date time)安排在制定的时间执行指定的任务。
(2)Timer.schedule(TimerTask task,Date firstTime ,long period)安排指定的任务在指定的时间开始进行重复的固定延迟执行
(3)Timer.schedule(TimerTask task,long delay)安排在指定延迟后执行指定的任务
(4)Timer.schedule(TimerTask task,long delay,long period)安排指定的任务从指定的延迟后开始进行重复的固定延迟执行
(5)Timer.scheduleAtFixedRate(TimerTask task,Date firstTime,long period)安排指定的任务在指定的时间开始进行重复的固定速率执行
(6)Timer.scheduleAtFixedRate(TimerTask task,long delay,long period)安排指定的任务在指定的延迟后开始进行重复的固定速率执行
public class TestTimer{public static void main(String[] args){TimerTask timerTask new TimerTask(){Overridepublic void run(){System.out.println(tesk run: new Date());}};Timer timer new Timer();//安排指定的任务在指定的时间开始进行重复的而固定延迟执行每3庙执行一次timer.schedule(timeTask,10,3000);}
}方案二ScheduleExecutorService
public class TestScheduleExecutorService{public static void main(String[] args){ScheduledExecutorService service Executors.newSingleThreadScheduledExecutor();/**参数任务体、首次执行的延时时间、任务执行间隔、间隔时间单位*/service.scheduleAtFixedRate(()-System.out.println(task ScheduledExecutorService new Date()),0, 3, TimeUnit.SECONDS);}
}方案三SpringTask
Cron表达式若干数字、空格、符号按照一定的规则组成一组字符串来表达时间信息。在线corn表达式生成器https://www.pppet.net/
标准格式A B C D E F G A表示秒B表示分C表示小时D表示日E表示月F表示星期G表示年
spring3.0以后自带的task
注解方式
!--启动定时任务的注解驱动--task:annotation-driven/Slf4j
Component
public class ScheduledService{Scheduled(cron 0/5 * * * * *)public void scheduled(){log.info(使用cron {},System.currentTimeMillis());}Scheduled(fixedRate 5000) //每5秒运行一次public void scheduled1(){log.info(使用fixedRate{}, System.currentTimeMillis());}Scheduled(fixedDelay 5000)public void scheduled2() {log.info(fixedDelay{},System.currentTimeMillis());}
}配置方式 !--配置定时任务--task:scheduled-tasks!--task:scheduled refjob1 methodrun cron0/5 * * * * ?/--task:scheduled refjob1 methodrun fixed-rate5000//task:scheduled-tasks
每5秒执行一次
public class job1 {public void run(){System.out.println(job1.....new Date());}
}
方案四多线程执行
基于注解设置多线程
Component
EnableScheduling //开启定时任务
EnableAsync //开启多线程
public class MultithreadScheduleTask{AsyncScheduled(fixedDDelay 5000) //间隔5秒public void first(){System.out.println(第一个定时任务开始 LocalDateTime.now().toLocalTime() \r\n线程 : Thread.currentThread().getName());System.out.println();Thread.sleep(1000 * 10);}AsyncScheduled(fixedDelay 5000)public void second() {System.out.println(第二个定时任务开始 : LocalDateTime.now().toLocalTime() \r\n线程 : Thread.currentThread().getName());System.out.println();}
}方案五quartz
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-quartz/artifactId
/dependencyConfiguration
public class QuartzConfig{Beanpublic JobDetail teatQuaritzDetail(){return JobBuilder.newJob(MyAuartz.class).withIdentity(myQuartz).storeDurably().build();}Beanpublic Trigger testQuartzTrigger(){SimpleScheduleBuilder scheduleBuilder SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(10) //设置时间周期单位.repeatForever();return TriggerBuilder.newTrigger().forJob(testQuartzDetail()).withIdentity(testQuartz).withSchedule(scheduleBuilder).build();}
}只要启动SpringBoot羡慕就会输出
配置的方式 dependencygroupIdorg.quartz-scheduler/groupIdartifactIdquartz/artifactIdversion2.3.2/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-context-support/artifactIdversion5.3.2/version/dependency !-- 线程池 --bean idexecutor classorg.springframework.scheduling.concurrent.ThreadPoolTaskExecutorproperty namecorePoolSize value10 /property namemaxPoolSize value100 /property namequeueCapacity value500 //bean!--FixedRate 定时任务 --bean idquartzJob classcom.wanmait.mavendemo.job.QuartzJob /bean idjobDetail classorg.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBeanproperty nametargetObject refquartzJob /property nametargetMethod valueprint //bean!-- Cron quartz-2.x 的配置 时间调度的两种写法 fixedRate和cron--bean idcronTrigger classorg.springframework.scheduling.quartz.CronTriggerFactoryBean property namejobDetail refjobDetail /property namecronExpression value0/5 * * * * ? //beanbean idsimpleTrigger classorg.springframework.scheduling.quartz.SimpleTriggerFactoryBeanproperty namejobDetail refjobDetail/propertyproperty namestartDelay value0 /!-- 调度工厂实例化后经过 0 秒 开始执行调度 --property namerepeatInterval value2000 /!-- 每 2 秒调度一次 --/bean!-- 调度 看你用哪个 两种选一种 --bean classorg.springframework.scheduling.quartz.SchedulerFactoryBeanproperty nametriggerslist!--ref beansimpleTrigger /--ref beancronTrigger//list/propertyproperty nametaskExecutor refexecutor //bean
public class QuartzJob{public void print(){System.out.println(quartzjob..........new Date());}
}SpringBoot定时任务 在启动类上加EnableScheduling开启定时任务 写一个任务类添加Component注解被spring管理在方法上添加Scheduled(fixedRate 2000)或者 Scheduled(cron “0-5 * * ? * *”)
动态调整定时任务执行corn表达式、动态关闭开启定时任务
Configuration
public class ScheduledConfig implements SchedulingConfigurer{Autowiredprivate ApplicationContext context;Overridepublic void confugureTasks(ScheduledTaskRegistrar taskRegistrar){for(SpringScheuledCron springScheduledCron:cronRepository.findAll()){Class? clazz;Object task;try{clazz Class.forName(springScheduledCron.getCronKey());task context.getBean(clazz);}catch(ClassNotFoundException e){throw new IllegalArgumentException(spring_scheduled_cron表数据 springScheduledCron.getCronKey() 有误, e);}catch(BeansException e){throw new IllegalArgumentException(springScheduledCron.getCronKey() 未纳入到spring管理, e);}Assert.isAssignable(ScheduledOfTask.class, task.getClass(), 定时任务类必须实现ScheduledOfTask接口);//可以通过改变书库数据进而实现动态改变执行周期taskRegistrar.addTriggerTask(((Runnable)task),triggerContext - {//可以使用持久层比如Mybatis来实现从数据库中获取String cronExpression 0/10 * * * * ?;return new CronTrigger(cronExpression).nextExecutionTime(triggerContext);});}}Beanpublic Executor taskExecutor(){return Executors.newScheduledThreadPool(10);}
}分布式调度框架
分布式任务调度框架有cronsun、Elastic-job、saturn、lts、TBSchedule、xxl-job 等。