<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                該功能由 [`QuartzScheduler`](http://www.quartz-scheduler.org/) 封裝而來 [TOC] # 定時任務幾種實現方式 ``` 1. Java的java.util.Timer類,這個類允許你調度一個java.util.TimerTask任務。 2. Java的線程池類ScheduledExecutorService也可以實現一些簡單的定時任務,周期性任務。 3. Spring的@Scheduled,可以將它看成一個輕量級的Quartz,而且使用起來比Quartz簡單許多。 4. Quartz是一個功能比較強大的的調度器,可以讓你的程序在指定時間執行,也可以按照某一個頻度執行,可以方便的分布式部署、便捷的監控和管理任務,適合任務很多的情況。 ``` # 依賴模塊 ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency> ``` # 封裝方法 ``` public static void addJob(String job, Class<? extends Job> cls, int interval, int repeat) public static void addJob(String job, Class<? extends Job> cls, int interval, int repeat, Map<? extends String, ? extends Object> data) public static void addJob(String job, String group, Class<? extends Job> cls, int interval, int repeat, Map<? extends String, ? extends Object> data) public static void addJob(String job, Class<? extends Job> cls, String cron) public static void addJob(String job, Class<? extends Job> cls, String cron, Map<? extends String, ? extends Object> data) public static void addJob(String job, String group, Class<? extends Job> cls, String cron, Map<? extends String, ? extends Object> data) public static void createJob(String job, Class<? extends Job> cls, ScheduleBuilder<? extends Trigger> ScheduleBuilder, Map<? extends String, ? extends Object> data) public static void createJob(String job, String group, Class<? extends Job> cls, ScheduleBuilder<? extends Trigger> ScheduleBuilder, Map<? extends String, ? extends Object> data) public static void updateJob(String job, int interval, int repeat) public static void updateJob(String job, String cron) } public static void updateJob(String job, String group, int interval, int repeat) public static void updateJob(String job, String group, String cron) public static void deleteJob(String job) public static void deleteJob(String job, String group) public static void pauseJob(String job) public static void pauseJob(String job, String group) public static void resumeJob(String job) public static void resumeJob(String job, String group) public static void runJobNow(String job) public static void runJobNow(String job, String group) public static void startJobs() public static void shutdownJobs() public static List<Map<String, Object>> queryAllJob() public static List<Map<String, Object>> queryRunJob() ``` # 測試示例 Simple ``` @Test public void scheduler_simple() throws InterruptedException { Map<String, String> map = Maps.newHashMap(); map.put("key", "time"); log.info("【添加A】每1秒輸出一次 "); ScheduleHelper.addJob(job, SimpleJob.class, 1, 0, map); Thread.sleep(6000); log.info("【修改A】每2秒輸出一次"); ScheduleHelper.updateJob(job, 2, 0); Thread.sleep(6000); log.info("【移除A】"); ScheduleHelper.deleteJob(job); Thread.sleep(6000); log.info("【添加B】每3秒輸出一次"); ScheduleHelper.addJob(job, SimpleJob.class, 3, 0, map); Thread.sleep(6000); log.info("【暫停B】"); ScheduleHelper.pauseJob(job); Thread.sleep(6000); log.info("【恢復B】"); ScheduleHelper.resumeJob(job); Thread.sleep(6000); log.info("【移除B】"); ScheduleHelper.deleteJob(job); Thread.sleep(6000); } ``` 驗證Simple結果 ``` [FastBoot][ INFO][08-22 17:38:21]-->[main: 5490][scheduler_simple(SchedulerHelperTest.java:34)] | - 【添加A】每1秒輸出一次 [FastBoot][ INFO][08-22 17:38:21]-->[quartzScheduler_Worker-1: 5514][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:38:21,當前任務1個,正在運行 1 [FastBoot][ INFO][08-22 17:38:22]-->[quartzScheduler_Worker-2: 6496][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:38:22,當前任務1個,正在運行 1 [FastBoot][ INFO][08-22 17:38:23]-->[quartzScheduler_Worker-3: 7504][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:38:23,當前任務1個,正在運行 1 [FastBoot][ INFO][08-22 17:38:24]-->[quartzScheduler_Worker-4: 8507][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:38:24,當前任務1個,正在運行 1 [FastBoot][ INFO][08-22 17:38:25]-->[quartzScheduler_Worker-5: 9501][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:38:25,當前任務1個,正在運行 1 [FastBoot][ INFO][08-22 17:38:26]-->[quartzScheduler_Worker-6:10497][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:38:26,當前任務1個,正在運行 1 [FastBoot][ INFO][08-22 17:38:27]-->[main:11501][scheduler_simple(SchedulerHelperTest.java:38)] | - 【修改A】每2秒輸出一次 [FastBoot][ INFO][08-22 17:38:27]-->[quartzScheduler_Worker-7:11501][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:38:27,當前任務1個,正在運行 1 [FastBoot][ INFO][08-22 17:38:29]-->[quartzScheduler_Worker-8:13497][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:38:29,當前任務1個,正在運行 1 [FastBoot][ INFO][08-22 17:38:31]-->[quartzScheduler_Worker-9:15502][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:38:31,當前任務1個,正在運行 1 [FastBoot][ INFO][08-22 17:38:33]-->[quartzScheduler_Worker-10:17502][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:38:33,當前任務1個,正在運行 1 [FastBoot][ INFO][08-22 17:38:33]-->[main:17502][scheduler_simple(SchedulerHelperTest.java:42)] | - 【移除A】 [FastBoot][ INFO][08-22 17:38:33]-->[quartzScheduler_Worker-10:17502][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:38:33,當前任務0個,正在運行 1 [FastBoot][ INFO][08-22 17:38:39]-->[main:23510][scheduler_simple(SchedulerHelperTest.java:46)] | - 【添加B】每3秒輸出一次 [FastBoot][ INFO][08-22 17:38:39]-->[quartzScheduler_Worker-1:23514][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:38:39,當前任務1個,正在運行 1 [FastBoot][ INFO][08-22 17:38:42]-->[quartzScheduler_Worker-2:26520][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:38:42,當前任務1個,正在運行 1 [FastBoot][ INFO][08-22 17:38:45]-->[main:29527][scheduler_simple(SchedulerHelperTest.java:50)] | - 【暫停B】 [FastBoot][ INFO][08-22 17:38:45]-->[quartzScheduler_Worker-3:29528][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:38:45,當前任務1個,正在運行 1 [FastBoot][ INFO][08-22 17:38:51]-->[main:35543][scheduler_simple(SchedulerHelperTest.java:54)] | - 【恢復B】 [FastBoot][ INFO][08-22 17:38:51]-->[quartzScheduler_Worker-4:35544][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:38:51,當前任務1個,正在運行 1 [FastBoot][ INFO][08-22 17:38:51]-->[quartzScheduler_Worker-5:35544][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:38:51,當前任務1個,正在運行 2 [FastBoot][ INFO][08-22 17:38:54]-->[quartzScheduler_Worker-6:38514][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:38:54,當前任務1個,正在運行 1 [FastBoot][ INFO][08-22 17:38:57]-->[quartzScheduler_Worker-7:41519][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:38:57,當前任務1個,正在運行 1 [FastBoot][ INFO][08-22 17:38:57]-->[main:41550][scheduler_simple(SchedulerHelperTest.java:58)] | - 【移除B】. ``` Cron ``` @Test public void scheduler_cron() throws InterruptedException { Map<String, String> map = Maps.newHashMap(); map.put("key", "time"); log.info("【添加A】每1秒輸出一次 "); ScheduleHelper.addJob(job, SimpleJob.class, "0/1 * * * * ?", map); Thread.sleep(6000); log.info("【修改A】每2秒輸出一次"); ScheduleHelper.updateJob(job, "0/2 * * * * ?"); Thread.sleep(6000); log.info("【移除A】"); ScheduleHelper.deleteJob(job); Thread.sleep(6000); log.info("【添加B】每3秒輸出一次"); ScheduleHelper.addJob(job, SimpleJob.class, "*/3 * * * * ?", map); Thread.sleep(6000); log.info("【暫停B】"); ScheduleHelper.pauseJob(job); Thread.sleep(6000); log.info("【恢復B】"); ScheduleHelper.resumeJob(job); Thread.sleep(6000); log.info("【移除B】."); ScheduleHelper.deleteJob(job); Thread.sleep(6000); } ``` 驗證Cron結果 ``` [FastBoot][ INFO][08-22 17:41:53]-->[main: 5185][scheduler_cron(SchedulerHelperTest.java:69)] | - 【添加A】每1秒輸出一次 [FastBoot][ INFO][08-22 17:41:53]-->[quartzScheduler_Worker-1: 5220][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:41:53,當前任務1個,正在運行 1 [FastBoot][ INFO][08-22 17:41:54]-->[quartzScheduler_Worker-2: 5694][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:41:54,當前任務1個,正在運行 1 [FastBoot][ INFO][08-22 17:41:55]-->[quartzScheduler_Worker-3: 6701][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:41:55,當前任務1個,正在運行 1 [FastBoot][ INFO][08-22 17:41:56]-->[quartzScheduler_Worker-4: 7705][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:41:56,當前任務1個,正在運行 1 [FastBoot][ INFO][08-22 17:41:57]-->[quartzScheduler_Worker-5: 8696][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:41:57,當前任務1個,正在運行 1 [FastBoot][ INFO][08-22 17:41:58]-->[quartzScheduler_Worker-6: 9701][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:41:58,當前任務1個,正在運行 1 [FastBoot][ INFO][08-22 17:41:59]-->[quartzScheduler_Worker-7:10690][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:41:59,當前任務1個,正在運行 1 [FastBoot][ INFO][08-22 17:41:59]-->[main:11215][scheduler_cron(SchedulerHelperTest.java:73)] | - 【修改A】每2秒輸出一次 [FastBoot][ INFO][08-22 17:41:59]-->[quartzScheduler_Worker-8:11218][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:41:59,當前任務1個,正在運行 1 [FastBoot][ INFO][08-22 17:42:00]-->[quartzScheduler_Worker-9:11693][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:42:00,當前任務1個,正在運行 1 [FastBoot][ INFO][08-22 17:42:02]-->[quartzScheduler_Worker-10:13690][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:42:02,當前任務1個,正在運行 1 [FastBoot][ INFO][08-22 17:42:04]-->[quartzScheduler_Worker-1:15692][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:42:04,當前任務1個,正在運行 1 [FastBoot][ INFO][08-22 17:42:05]-->[main:17220][scheduler_cron(SchedulerHelperTest.java:77)] | - 【移除A】 [FastBoot][ INFO][08-22 17:42:11]-->[main:23220][scheduler_cron(SchedulerHelperTest.java:81)] | - 【添加B】每3秒輸出一次 [FastBoot][ INFO][08-22 17:42:12]-->[quartzScheduler_Worker-2:23702][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:42:12,當前任務1個,正在運行 1 [FastBoot][ INFO][08-22 17:42:15]-->[quartzScheduler_Worker-3:26702][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:42:15,當前任務1個,正在運行 1 [FastBoot][ INFO][08-22 17:42:17]-->[main:29227][scheduler_cron(SchedulerHelperTest.java:85)] | - 【暫停B】 [FastBoot][ INFO][08-22 17:42:23]-->[main:35230][scheduler_cron(SchedulerHelperTest.java:89)] | - 【恢復B】 [FastBoot][ INFO][08-22 17:42:23]-->[quartzScheduler_Worker-4:35232][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:42:23,當前任務1個,正在運行 1 [FastBoot][ INFO][08-22 17:42:24]-->[quartzScheduler_Worker-5:35696][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:42:24,當前任務1個,正在運行 1 [FastBoot][ INFO][08-22 17:42:27]-->[quartzScheduler_Worker-6:38694][execute(SimpleJob.java:30)] | - simple job time 2020-08-22 17:42:27,當前任務1個,正在運行 1 [FastBoot][ INFO][08-22 17:42:29]-->[main:41246][scheduler_cron(SchedulerHelperTest.java:93)] | - 【移除B】. ``` # 存儲配置 數據庫 已依賴了spring-boot-starter-quartz模塊,在spring yml中可開啟存儲配置,這樣通過可視化界面web中對任務管理,當項目啟動時,通過startJobs()啟動所有任務 ``` @Test public void scheduler() throws InterruptedException { ScheduleHelper.startJobs(); Thread.sleep(60 * 1000); ScheduleHelper.shutdownJobs(); } ``` 內存 ``` 不開啟數據庫存儲,每次啟動每次都會初始化任務,當項目異常退出后,任務數據會丟失。 ``` GOTV 任務量不大,直接走的內存。通過使用裝飾器模式,不同的業務使用不同的任務裝飾器去裝飾,最終在項目啟動通過判斷不通的條件(服務器)去啟動不同的任務。 ``` private static void startupProjectTask() { try { log.info("服務器: 【{}】", SpringStartup.servername.trim()); log.info("定時任務啟動項-start"); ISchedule job1 = new VodJobDecorator(); job1.init(); log.info("定時任務啟動項: {} 項已啟動", ScheduleHelper.queryAllJob().size()); } catch (Exception e) { log.info("定時任務啟動項", e); } } ``` VodJobDecorator.java ``` @Override public void init() { if (isStart()) { log.info("電影務初始"); // 定時刪除 ScheduleHelper.addJob(VodJobRunClear.job_name, VodJobRunClear.class, "0 0 0 * * ?");// 每晚24小時執行 // 定時重置 ScheduleHelper.addJob(VodJobRunRest.job_name, VodJobRunRest.class, "0 0 0 * * ?");// 每晚24小時執行 log.info("電影服務完成"); } else { log.info("電影服務不處理任務"); } } @Override public boolean isStart() { // 判斷條件 return SpringStartup.servername.contains("gotv-api"); } ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看