spring 整合quartz
生活随笔
收集整理的這篇文章主要介紹了
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開刀, 方法是無參無返,注解方式
- 頭命名
啟動服務器就會…
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux要求关闭httpd服务,Apa
- 下一篇: 字符编码理解