日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spring 整合quartz

發布時間:2023/12/10 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring 整合quartz 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

定時框架quartz

    • 1. 使用場景
    • 2. corn表達式
    • 3. 簡單使用
    • 4. 注意點

1. 使用場景

  • 定時任務
    周期性執行 (每隔多長時間)
    定時執行(每天幾點)

  • 系統之間的數據交換
    兩個系統之間的數據

  • 數據整理
    報表打印…

  • 2. corn表達式

    corn 表達式在線生成

    秒 分鐘 小時 0 0/30 0/1 * * ? 代表每天每30分鐘運行一次0 0/3 0/1 * * ? 代表每天每3分鐘運行一次0/1 0/1 0/1 * * ? 代表每天每1秒鐘運行一次0 11 23 * * ? 代表每天晚上23:11運行一次 "0 0 12 * * ?" 每天中午12點觸發"0 15 10 ? * *" 每天上午10:15觸發"0 15 10 * * ?" 每天上午10:15觸發"0 15 10 * * ? *" 每天上午10:15觸發"0 15 10 * * ? 2005" 2005年的每天上午10:15觸發"0 * 14 * * ?" 在每天下午2點到下午2:59期間的每1分鐘觸發"0 0/5 14 * * ?" 在每天下午2點到下午2:55期間的每5分鐘觸發"0 0/5 14,18 * * ?" 在每天下午2點到2:55期間和下午6點到6:55期間的每5分鐘觸發"0 0-5 14 * * ?" 在每天下午2點到下午2:05期間的每1分鐘觸發"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44觸發"0 15 10 ? * MON-FRI" 周一至周五的上午10:15觸發 "0 15 10 15 * ?" 每月15日上午10:15觸發 "0 15 10 L * ?" 每月最后一日的上午10:15觸發"0 15 10 ? * 6L" 每月的最后一個星期五上午10:15觸發"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一個星期五上午10:15觸發"0 15 10 ? * 6#3" 每月的第三個星期五上午10:15觸發每天早上6點 0 6 * * *每兩個小時 0 */2 * * *晚上11點到早上7點之間每兩個小時,早上八點 0 23-7/2,8 * * *每個月的4號和每個禮拜的禮拜一到禮拜三的早上11點 0 11 4 * 1-31月1日早上4點 0 4 1 1 *秒 分??時???日??月 星期 0??30 11,3??????*??1-5??11:30 和3:300 45 23,11 * * ? 每天11:45和23:45觸發

    3. 簡單使用

    核心注解scheduled,里面寫corn表達式,將bean丟到ioc中

    • jar包,需要整合spring使用

    這里以controller開刀, 方法是無參無返,注解方式

    • 頭命名
    xmlns:task="http://www.springframework.org/schema/task" http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.1.xsd <!-- quartz注解驅動 --><task:annotation-driven/> package com.test.action;import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Controller;@Controller public class DemoAction {/*** 系統間的數據交換 (放到公共的地方法)* 數據整理* */boolean task1Flag = true;// 任務積壓 很短@Scheduled(cron = "0/1 * * * * ? ")public void show() {if (task1Flag) {task1Flag = false;System.out.println("hhhhh to do sth..");task1Flag = true;}}}

    啟動服務器就會…

    4. 注意點

    quartz如果設置每秒執行一次,會造成任務積壓(1s掉quartz接管的方法,里面service的執行可能能大于1s),服務器內存會炸。
    解決,像上面搞一個標記flag。
    但是,每個方法都不能加判斷,標記,顯得冗余。

    所以使用aop,對controller中的quartz進行環繞。

    package com.test.aspect;import java.lang.reflect.Field;import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.Signature; import org.aspectj.lang.reflect.MethodSignature;/*** 防止定時任務積壓 切面*/ public class TaskAspect {//環繞public Object doRound(ProceedingJoinPoint pjp){//返回結果Object returnObj = null;// Object[] args = pjp.getArgs(); // Class class1 = pjp.getClass();//目標對象Object target = pjp.getTarget(); // Object this1 = pjp.getThis();//獲得目標方法名Signature sig = pjp.getSignature();MethodSignature msig = null;if (!(sig instanceof MethodSignature)) {throw new IllegalArgumentException("該注解只能用于方法");}msig = (MethodSignature) sig;//方法名稱String methodName = msig.getName();//根據方法名稱獲得對應的屬性 task1Flag, task2Flag... try {Field field = target.getClass().getDeclaredField(methodName+"Flag");//設置允許訪問field.setAccessible(true);//獲得屬性值boolean flag = Boolean.parseBoolean(field.get(target).toString());if(flag){//將標記改成falsefield.set(target, false);//執行目標try {returnObj = pjp.proceed();} catch (Throwable e) {e.printStackTrace();}//將標記改成truefield.set(target, true);}else{System.out.println("目標正在執行......");}} catch (SecurityException e1) {e1.printStackTrace();} catch (NoSuchFieldException e1) {e1.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} return returnObj;}}

    總結

    以上是生活随笔為你收集整理的spring 整合quartz的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。