电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

java定時任務實現的4種方式小結

瀏覽:57日期:2022-08-23 14:21:49

1. java自帶的Timer

Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() {System.out.println('Time’s up!'); } },3*1000,1000);

2.ScheduledThreadPool-線程池

ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(2); scheduledThreadPool.scheduleAtFixedRate(new Runnable() { @Override public void run() {System.out.println('========================='); } }, 1000, 2000, TimeUnit.MILLISECONDS); scheduledThreadPool.scheduleAtFixedRate(new Runnable() { @Override public void run() {System.out.println(System.currentTimeMillis()+'<><>'+System.nanoTime()); } }, 1000, 2000, TimeUnit.MILLISECONDS);

3.使用注解的形式:@Scheduled

@Componentpublic class SpringScheduled { @Scheduled(initialDelay = 2000,fixedDelay = 5000) public void doSomething() { System.out.println('Spring自帶的Scheduled執行了======================='); }} //下面是開啟@SpringBootApplication@EnableSchedulingpublic class DemoApplication { public static void main(String[] args) throws InterruptedException { SpringApplication application = new SpringApplication(DemoApplication.class); application.addListeners(new ContextRefreshedEventListener()); application.run(args); }}

4.使用Quartz定時任務調度器

配置

@Configurationpublic class QuartzConfig { @Resource private ScheduleTask scheduleTask; /** * 配置定時任務1 * @return */ @Bean(name='firstJobDetail') public MethodInvokingJobDetailFactoryBean firstJobDetail(){ MethodInvokingJobDetailFactoryBean method = new MethodInvokingJobDetailFactoryBean(); // 為需要執行的實體類對應的對象 method.setTargetObject(scheduleTask); // 需要執行的方法 method.setTargetMethod('test'); // 是否并發執行 method.setConcurrent(false); return method; } /** * 配置觸發器1 * @param firstJobDetail * @return */ @Bean(name='firstTrigger') public SimpleTriggerFactoryBean firstTrigger(JobDetail firstJobDetail){ SimpleTriggerFactoryBean simpleBean = new SimpleTriggerFactoryBean(); simpleBean.setJobDetail(firstJobDetail); // 設置任務啟動延遲 simpleBean.setStartDelay(1000); // 每1秒執行一次 simpleBean.setRepeatInterval(1000); //設置重復計數 //simpleBean.setRepeatCount(0); return simpleBean; } /** * 配置Scheduler */ @Bean(name = 'scheduler') public SchedulerFactoryBean schedulerFactoryBean(Trigger firstTrigger){ SchedulerFactoryBean factoryBean = new SchedulerFactoryBean(); factoryBean.setTriggers(firstTrigger); return factoryBean; } }

要執行的任務

@Componentpublic class ScheduleTask { public void test() { System.out.println('===================================='); } }

總結:

還有其他方式可以實現定時任務的方式,可以貼出來,討論討

補充知識:SpringBoot定時任務簡單使用和自定義開啟關閉修改周期

一、簡單使用

1.pom加入基本springboot基本的starter即可

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency>

2.@Scheduled 參數可以接受兩種定時的設置,一種是我們常用的cron='*/6 * * * * ?',一種是 fixedRate = 6000,兩種都表示每隔六秒打印一下內容。

fixedRate 說明

@Scheduled(fixedRate = 6000) :上一次開始執行時間點之后6秒再執行

@Scheduled(fixedDelay = 6000) :上一次執行完畢時間點之后6秒再執行

@Scheduled(initialDelay=1000, fixedRate=6000) :第一次延遲1秒后執行,之后按fixedRate的規則每6秒執行一次

@Componentpublic class TimingTask { private static final SimpleDateFormat dateFormat = new SimpleDateFormat('HH:mm:ss'); @Scheduled(cron='*/6 * * * * ?') private void process(){ System.out.println('this is scheduler task runing '+new Date()); } @Scheduled(fixedRate = 6000) public void reportCurrentTime() { System.out.println('現在時間:' + dateFormat.format(new Date())); }}

3.啟動類加上@EnableScheduling注解。

@SpringBootApplication(exclude = MongoAutoConfiguration.class)@EnableSchedulingpublic class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }

4.運行結果

this is scheduler task runing Thu Jul 18 10:59:06 CST 2019現在時間:10:59:10this is scheduler task runing Thu Jul 18 10:59:12 CST 2019現在時間:10:59:16this is scheduler task runing Thu Jul 18 10:59:18 CST 2019現在時間:10:59:22this is scheduler task runing Thu Jul 18 10:59:24 CST 2019現在時間:10:59:28

以上就是定時任務的簡單使用。但是有時候,定時任務需要關閉,和開啟,或者修改定時任務的運行周期,可以使用下面的方式實現.

二、高級使用,自定義定時任務,關閉,開啟,修改周期

1.說明

ThreadPoolTaskScheduler:線程池任務調度類,能夠開啟線程池進行任務調度。

ThreadPoolTaskScheduler.schedule()方法會創建一個定時計劃ScheduledFuture,在這個方法需要添加兩個參數,Runnable(線程接口類) 和CronTrigger(定時任務觸發器)

在ScheduledFuture中有一個cancel可以停止定時任務。

@RestController@RequestMapping('/time')public class DynamicScheduledTask { private static String DEFAULT_CRON = '0/5 * * * * ?'; @Autowired private ThreadPoolTaskScheduler threadPoolTaskScheduler; private ScheduledFuture<?> future; @Bean public ThreadPoolTaskScheduler threadPoolTaskScheduler() { return new ThreadPoolTaskScheduler(); } @RequestMapping('/{id}/startCron') public String startCron(@PathVariable('id') String id) { future = threadPoolTaskScheduler.schedule(new MyRunnable(), new CronTrigger(DEFAULT_CRON)); System.out.println('DynamicTask.startCron()'+'------'+id); return 'startCron'; } @RequestMapping('/{id}/stopCron') public String stopCron(@PathVariable('id') String id) { if (future != null) { future.cancel(true); } System.out.println('DynamicTask.stopCron()'+'------'+id); return 'stopCron'; } @RequestMapping('/{id}/changeCron10') public String startCron10(@PathVariable('id') String id) { stopCron(id);// 先停止,在開啟. future = threadPoolTaskScheduler.schedule(new MyRunnable(), new CronTrigger('*/10 * * * * *')); System.out.println('DynamicTask.startCron10()'+'------'+id); return 'changeCron10'; } private class MyRunnable implements Runnable { @Override public void run() { System.out.println('DynamicTask.MyRunnable.run(),' + new Date()); } }}

如果想,做成后臺管理,添加刪除定時任務,可以將定時任務,持久化到數據庫,自定義開發MyRunnable定時任務的業務類,也持久化到數據庫,然后,threadPoolTaskScheduler.schedule要的業務類,可通過反射實例化出來,傳遞,然后,通過url,id參數,來開啟,關閉,刪除,對應的定時任務。

以上這篇java定時任務實現的4種方式小結就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 影合社-影视人的内容合作平台 | 安徽控制器-合肥船用空调控制器-合肥家电控制器-合肥迅驰电子厂 安徽净化板_合肥岩棉板厂家_玻镁板厂家_安徽科艺美洁净科技有限公司 | 智能电表|预付费ic卡水电表|nb智能无线远传载波电表-福建百悦信息科技有限公司 | 建大仁科-温湿度变送器|温湿度传感器|温湿度记录仪_厂家_价格-山东仁科 | 中国产业发展研究网 - 提供行业研究报告 可行性研究报告 投资咨询 市场调研服务 | 焊接烟尘净化器__焊烟除尘设备_打磨工作台_喷漆废气治理设备 -催化燃烧设备 _天津路博蓝天环保科技有限公司 | RV减速机-蜗轮蜗杆减速机-洗车机减速机-减速机厂家-艾思捷 | 台式核磁共振仪,玻璃软化点测定仪,旋转高温粘度计,测温锥和测温块-上海麟文仪器 | 防腐木批发价格_深圳_惠州_东莞防腐木厂家_森源(深圳)防腐木有限公司 | 东莞韩创-专业绝缘骨架|马达塑胶零件|塑胶电机配件|塑封电机骨架厂家 | 全自动包装机_灌装机生产厂家-迈驰包装设备有限公司 | 浙江红酒库-冰雕库-气调库-茶叶库安装-医药疫苗冷库-食品物流恒温恒湿车间-杭州领顺实业有限公司 | 银川美容培训-美睫美甲培训-彩妆纹绣培训-新娘化妆-学化妆-宁夏倍莱妮职业技能培训学校有限公司 临时厕所租赁_玻璃钢厕所租赁_蹲式|坐式厕所出租-北京慧海通 | 截齿|煤截齿|采煤机截齿|掘进机截齿|旋挖截齿-山东卓力截齿厂家报价 | 办公室装修_上海办公室设计装修_时尚办公新主张-后街印象 | 西宁装修_西宁装修公司-西宁业之峰装饰-青海业之峰墅级装饰设计公司【官网】 | 螺杆泵_中成泵业| 泰兴市热钻机械有限公司-热熔钻孔机-数控热熔钻-热熔钻孔攻牙一体机 | 北京森语科技有限公司-模型制作专家-展览展示-沙盘模型设计制作-多媒体模型软硬件开发-三维地理信息交互沙盘 | 砂石生产线_石料生产线设备_制砂生产线设备价格_生产厂家-河南中誉鼎力智能装备有限公司 | 武汉画册印刷厂家-企业画册印刷-画册设计印刷制作-宣传画册印刷公司 - 武汉泽雅印刷厂 | CTAB,表面活性剂1631溴型(十六烷基三甲基溴化铵)-上海升纬化工原料有限公司 | 展厅设计公司,展厅公司,展厅设计,展厅施工,展厅装修,企业展厅,展馆设计公司-深圳广州展厅设计公司 | 刚性-柔性防水套管-橡胶伸缩接头-波纹管补偿器-启腾供水材料有限公司 | [官网]叛逆孩子管教_戒网瘾学校_全封闭问题青少年素质教育_新起点青少年特训学校 | 合肥活动房_安徽活动板房_集成打包箱房厂家-安徽玉强钢结构集成房屋有限公司 | B2B网站_B2B免费发布信息网站_B2B企业贸易平台 - 企资网 | 换网器_自动换网器_液压换网器--郑州海科熔体泵有限公司 | 有声小说,听书,听小说资源库-听世界网 | 航空障碍灯_高中低光强航空障碍灯_民航许可认证航空警示灯厂家-东莞市天翔航天科技有限公司 | 超高频感应加热设备_高频感应电源厂家_CCD视觉检测设备_振动盘视觉检测设备_深圳雨滴科技-深圳市雨滴科技有限公司 | 活性炭-果壳木质煤质柱状粉状蜂窝活性炭厂家价格多少钱 | 山东成考网-山东成人高考网 | 软启动器-上海能曼电气有限公司 真空搅拌机-行星搅拌机-双行星动力混合机-广州市番禺区源创化工设备厂 | 耐磨焊丝,堆焊焊丝,耐磨药芯焊丝,碳化钨焊丝-北京耐默公司 | 衬氟止回阀_衬氟闸阀_衬氟三通球阀_衬四氟阀门_衬氟阀门厂-浙江利尔多阀门有限公司 | 净化车间_洁净厂房_净化公司_净化厂房_无尘室工程_洁净工程装修|改造|施工-深圳净化公司 | 小型数控车床-数控车床厂家-双头数控车床 | 阜阳成人高考_阜阳成考报名时间_安徽省成人高考网 | 喷播机厂家_二手喷播机租赁_水泥浆洒布机-河南青山绿水机电设备有限公司 | 产业规划_产业园区规划-产业投资选址及规划招商托管一体化服务商-中机院产业园区规划网 |