導航:首頁 > 編程語言 > javacron解析

javacron解析

發布時間:2023-01-25 05:59:22

java調用CRON原理

google一下。

② java中的定時任務@Scheled中的cron每隔3天執行一次的表達式怎麼寫,

假如15:00:00執行
0 0 15 */3
這樣試試

每隔三天就是不管它是幾月幾號,也不會管是不是閏年或閏月。一律隔三天就是了。

③ java的幾種定時任務

java定時任務有三種:

- JDK自帶 :JDK自帶的Timer以及JDK1.5+ 新增的ScheledExecutorService;


- Quartz :簡單卻強大的JAVA作業調度框架


- Spring3.0以後自帶的task :可以將它看成一個輕量級的Quartz,而且使用起來比Quartz簡單許多;

代碼參考:

  1. JDK 自帶的定時器實現

    schele(TimerTask task, Date time) 特定時間執行


    public static void main(String[] args) {


    for (int i = 0; i < 10; ++i) {


    new Timer("timer - " + i).schele(new TimerTask() {


    @Override
    public void run() {


    println(Thread.currentThread().getName() + " run ");


    }


    }, new Date(System.currentTimeMillis() + 2000));


    }
    }

  2. Quartz 定時器實現

    2.1 通過maven引入依賴(這里主要介紹2.3.0) 注意:shiro-scheler中依賴的是1.x版本 如果同時使用會沖突

    <!-- https://mvnrepository.com/artifact/org.quartz-scheler/quartz -->


    <dependency>


    <groupId>org.quartz-scheler</groupId>


    <artifactId>quartz</artifactId>


    <version>2.3.0</version>


    </dependency>

    2.2創建Job類

    public class TestJob implements Job{


    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {


    println(Thread.currentThread().getName() + " test job begin " + DateUtil.getCurrentTimeStr());


    }
    }

    2.3調度任務

    public static void main(String[] args) throws InterruptedException, SchelerException {


    Scheler scheler = new StdSchelerFactory().getScheler();


    // 開始


    scheler.start();


    // job 唯一標識 test.test-1


    JobKey jobKey = new JobKey("test" , "test-1");


    JobDetail jobDetail = JobBuilder.newJob(TestJob.class).withIdentity(jobKey).build();


    Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("test" , "test")

// 延遲一秒執行

.startAt(new Date(System.currentTimeMillis() + 1000))

// 每隔一秒執行 並一直重復

.withSchele(SimpleScheleBuilder.simpleSchele().withIntervalInSeconds(1).repeatForever())
.build();

scheler.scheleJob(jobDetail , trigger);

Thread.sleep(5000);
// 刪除job

scheler.deleteJob(jobKey);


}

3.Spring 相關的任務調度

3.1 配置文件實現

spring-schele.xml

<task:scheler id="myScheler" pool-size="10" />


<task:scheled-tasks scheler="myScheler">


<task:scheled ref="job" method="test" cron="0 * * * * ?"/>


</task:scheled-tasks>

3.2註解實現

spring-schele.xml


<task:scheler id="myScheler" pool-size="10" />


// 啟用註解


<task:annotation-driven scheler="myScheler"/>

@Component
public class Task{

@Scheled(cron="0/5 * * * * ? ") //每5秒執行一次
public void execute(){


DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");


System.out.println(sdf.format(DateTime.now().toDate())+"*********B任務每5秒執行一次進入測試");


}
}

④ Java怎麼把分鍾數或者毫秒值轉換為Quartz cron表達式,例如把5分鍾轉換後為(「0 0/5 * * * 」)急急急

參考如下內容:

CronTrigger
CronTriggers往往比SimpleTrigger更有用,如果您需要基於日歷的概念,而非SimpleTrigger完全指定的時間間隔,復發的發射工作的時間表。
CronTrigger,你可以指定觸發的時間表如「每星期五中午」,或「每個工作日9:30時」,甚至「每5分鍾一班9:00和10:00逢星期一上午,星期三星期五「。
即便如此,SimpleTrigger一樣,CronTrigger擁有的startTime指定的時間表時生效,指定的時間表時,應停止(可選)結束時間。
Cron Expressions
cron的表達式被用來配置CronTrigger實例。 cron的表達式是字元串,實際上是由七子表達式,描述個別細節的時間表。這些子表達式是分開的空白,代表:
1. Seconds
2. Minutes
3. Hours
4. Day-of-Month
5. Month
6. Day-of-Week
7. Year (可選欄位)
例 "0 0 12 ? * WED" 在每星期三下午12:00 執行,
個別子表達式可以包含范圍, 例如,在前面的例子里("WED")可以替換成 "MON-FRI", "MON, WED, FRI"甚至"MON-WED,SAT".
「*」 代表整個時間段.
每一個欄位都有一套可以指定有效值,如
Seconds (秒) :可以用數字0-59 表示,
Minutes(分) :可以用數字0-59 表示,
Hours(時) :可以用數字0-23表示,
Day-of-Month(天) :可以用數字1-31 中的任一一個值,但要注意一些特別的月份
Month(月) :可以用0-11 或用字元串 「JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV and DEC」 表示
Day-of-Week(每周):可以用數字1-7表示(1 = 星期日)或用字元口串「SUN, MON, TUE, WED, THU, FRI and SAT」表示
「/」:為特別單位,表示為「每」如「0/15」表示每隔15分鍾執行一次,「0」表示為從「0」分開始, 「3/20」表示表示每隔20分鍾執行一次,「3」表示從第3分鍾開始執行
「?」:表示每月的某一天,或第周的某一天
「L」:用於每月,或每周,表示為每月的最後一天,或每個月的最後星期幾如「6L」表示「每月的最後一個星期五」
「W」:表示為最近工作日,如「15W」放在每月(day-of-month)欄位上表示為「到本月15日最近的工作日」
「「#」:是用來指定「的」每月第n個工作日,例 在每周(day-of-week)這個欄位中內容為"6#3" or "FRI#3" 則表示「每月第三個星期五」

⑤ java中在定時器,定時每周一定時執行某個任務,必須在周一重新啟動了服務,該任務就會在指定的時間點執行

最常用的做法是使用UNIX的cron直接執行Java程序。
並不需要在Java做的那麼復雜。

Windows伺服器也有類似於cron的任務管理功能,同理

--------------------------->
Tomcat不是用來管理定時任務的,如果沒有HTTP請求,Servlet是不會被執行的。

建議lz把定期執行的處理做成一個獨立的Java程序,用cron執行。
如果不想寫獨立的Java程序,也可以用cron定期向Tomcat發送Http請求,但是,這樣做的話注意程序處理時間不能太長,因為HTTP通信有timeout的制約。

⑥ java 定時任務的幾種實現方式

  1. JDK 自帶的定時器實現

    // schele(TimerTask task, long delay) 延遲 delay 毫秒 執行
    // schele(TimerTask task, Date time) 特定時間執行
    public static void main(String[] args) {
    for (int i = 0; i < 10; ++i) {
    new Timer("timer - " + i).schele(new TimerTask() {
    @Override
    public void run() {
    println(Thread.currentThread().getName() + " run ");
    }
    }, 1000);
    }
    }
    2. Quartz 定時器實現

    //首先我們需要定義一個任務類,比如為MyJob02 ,
    //該類需要繼承Job類,然後添加execute(JobExecutionContext context)方法,在
    //這個方法中就是我們具體的任務執行的地方。
    //由希望由調度程序執行的組件實現的介面
    public class MyJob02 implements Job {
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
    // TODO Auto-generated method stub
    // 執行響應的任務.
    System.out.println("HelloJob.execute,"+new Date());
    }
    }

    public class QuartzTest5 {

    public static void main(String[] args) throws Exception {
    //SchelerFactory 是一個介面,用於Scheler的創建和管理
    SchelerFactory factory = new StdSchelerFactory();
    //從工廠裡面拿到一個scheler實例
    //計劃表(可能翻譯的不太貼切),現在我們有了要做的內容,
    //與調度程序交互的主要API
    /*
    * Scheler的生命期,從SchelerFactory創建它時開始,
    到Scheler調用shutdown()方法時結束;Scheler被創建後,
    可以增加、刪除和列舉Job和Trigger,以及執行其它與調度相關的操作
    (如暫停Trigger)。但是,Scheler只有在調用start()方法後,
    才會真正地觸發trigger(即執行job)
    */
    Scheler scheler = factory.getScheler();
    //具體任務.
    //用於定義作業的實例
    //JobBuilder - 用於定義/構建JobDetail實例,用於定義作業的實例。
    JobDetail job = JobBuilder.newJob(MyJob.class).withIdentity("job1", "group1").build();


    //Trigger(即觸發器) - 定義執行給定作業的計劃的組件
    //TriggerBuilder - 用於定義/構建觸發器實例
    CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1")
    .withSchele(CronScheleBuilder.cronSchele("0/1 * * * * ?")).build();
    scheler.scheleJob(job, trigger);
    scheler.start();


    }
    3. Spring boot 任務調度(這個非常容易實現)

    /*
    * 開啟對定時任務的支持
    * 在相應的方法上添加@Scheled聲明需要執行的定時任務。
    */
    @EnableScheling
    //@EnableScheling註解來開啟對計劃任務的支持
    public class Application {

    public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
    }
    }

    @Component
    public class ScheledTasks {
    private Logger logger = LoggerFactory.getLogger(ScheledTasks.class);
    private int i=0;
    //0 0 0 2 * ?
    @Scheled(cron="* * * 2 * ?")
    //@Scheled 註解用於標注這個方法是一個定時任務的方法
    public void testFixDelay() {
    logger.info("執行方法"+i++);
    }

⑦ java spring 中(cron = "0 0 */2 * * ")表示多久運行一次

cron = "0 0 */2 * * ?"表示在任意分鍾數後加2秒執行該定時任務具體配置參數如下:Cron-Expression in Quartz表達式用" "分隔為7個部分,每部分含義如下Field Name lowed Values Allowed Special Characters Seconds 0-59 , - * / Minutes 0-59 , - * / Hours 0-23 , - * / Day-of-month 1-31 , - * ? / L W C Month 1-12 or JAN-DEC , - * / Day-of-Week 1-7 or SUN-SAT , - * ? / L C # Year (Optional) empty, 1970-2099 , - * /補充說明:'*'代表 '任何值''?'也代表 '任何值', 但只用於 Day-of-month 和 Day-of-Week, 當其中一個設置了條件時,另外一個就要用'?' 來表示 '任何值''-'用來表示範圍, 比如 Day-of-month 5-10 代表 5號到10號','用來添加附加的參數,比如 Hours 4,14 代表 上午4點和下午兩點'/'用來代表增量以用來循環,比如 Hours 2/6 代表 2點,8點,下午2點,下午8點'L'用於 Day-of-month 和 Day-of-Week, 代表最後1天, 在Day-of-month中只用'L'就可以,在Day-of-week中用 'nL' 來代表是最後一個星期n'W'用於 Day-of-month, 代表最近工作日,比如 '15W', 如果15號那天是周六則取14號周五,如果是周日則取16號周一,其他情況不變'LW' 代表當月最後一個工作日'#'用於 Day-of-Week, 'n#m'用於代表當月第m個 "周n"(根據n在week中的定義確定)其實Spring中任務調度cronExpression的配置參數和上面的一些配置幾乎是一樣的(他只不過從秒開始quartz 是一個很不錯的spring 定時任備調度jar)

⑧ 求解一個cron表達式,spring中定時器的cron中一個月的最後一天23:00要如何設定

就是這么寫的

你可以嘗試更新下新版本的 jar包試試


或者降級一下jar包


⑨ java定時器的問題

那麼可能的原因是你的工程裡面存在類沖突,所以它load了另外一個類。
你可以把classpath loader打出來看一下,或者新建一個工程單獨把那個jar放進去調試一下

或者用一下jarfind工具

編程:JAVA如何讓線程每天8點執行一次

你使用過Quartz定時任務工具嗎?搜一下這個東西,可以將任務按照指定的頻率(比如每秒鍾執行一次、每分鍾執行一次、每小時執行一次等等),或者按照指定的時間點執行一次(比如每個小時的5分鍾執行一次、每天的8點執行一次),使用的是一個叫做cron的表達式

閱讀全文

與javacron解析相關的資料

熱點內容
一物一碼app是什麼軟體 瀏覽:660
php獲取匹配 瀏覽:443
為啥macbook文件夾打開沒有東西 瀏覽:74
蘋果應用商店下app怎麼收費 瀏覽:688
單片機定時器取余和取整 瀏覽:308
臨沭車輛解壓在哪裡 瀏覽:685
安卓智能手錶如何聽歌 瀏覽:542
win10文件夾取消分組折疊組 瀏覽:664
趨勢指標源碼分析 瀏覽:418
股票價格計算公式源碼 瀏覽:767
程序員解釋方向問題 瀏覽:831
安卓手機關閉屏幕怎麼錄音 瀏覽:232
為什麼老顯示伺服器連接失敗 瀏覽:419
滴答滴app上如何拼車 瀏覽:872
網路加密了怎麼用手機連接 瀏覽:53
香腸樹app等級怎麼看 瀏覽:364
解壓模擬器3d抖音小游戲 瀏覽:319
dlink如何列印伺服器 瀏覽:955
如何啟動後端伺服器 瀏覽:36
電腦安卓軟體界面怎麼默認恢復 瀏覽:266