欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring Boot 配置 Quartz 定時任務的方法

 更新時間:2021年09月07日 14:22:43   作者:m17193095294  
這篇文章主要介紹了Spring Boot 配置 Quartz 定時任務的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

Quartz有四個核心概念:

Job:是一個接口,只定義一個方法 execute(JobExecutionContext context),在實現(xiàn)接口的 execute 方法中編寫所需要定時執(zhí)行的 Job(任務)
Double slongitude = Double.valueOf(jobExecutionContext.getJobDetail().getJobDataMap().get("slongitude").toString());
JobDetail:Quartz 每次調(diào)度 Job 時,都重新創(chuàng)建一個 Job 實例,因此它不接受一個 Job 的實例,相反它接收一個 Job 實現(xiàn)類(JobDetail,描述 Job 的實現(xiàn)類及其他相關(guān)的靜態(tài)信息,如 Job 名字、描述、關(guān)聯(lián)監(jiān)聽器等信息),以便運行時通過 newInstance() 的反射機制實例化 Job。
rigger:是一個類,描述觸發(fā) Job 執(zhí)行的時間觸發(fā)規(guī)則,主要有 SimpleTrigger 和 CronTrigger 這兩個子類。當且僅當需調(diào)度一次或者以固定時間間隔周期執(zhí)行調(diào)度,SimpleTrigger 是最適合的選擇;而 CronTrigger 則可以通過 Cron 表達式定義出各種復雜時間規(guī)則的調(diào)度方案:如工作日周一到周五的 15:00 ~ 16:00 執(zhí)行調(diào)度等。
Scheduler:調(diào)度器就相當于一個容器,裝載著任務和觸發(fā)器,該類是一個接口,代表一個 Quartz 的獨立運行容器,Trigger 和 JobDetail 可以注冊到 Scheduler 中,兩者在 Scheduler 中擁有各自的組及名稱,組及名稱是 Scheduler 查找定位容器中某一對象的依據(jù),Trigger 的組及名稱必須唯一,JobDetail 的組和名稱也必須唯一(但可以和 Trigger 的組和名稱相同,因為它們是不同類型的)。Scheduler 定義了多個接口方法,允許外部通過組及名稱訪問和控制容器中 Trigger 和 JobDetail。

1.導入pom依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

2.開啟定時任務

@EnableScheduling注解

//java fhadmin.cn
@EnableScheduling
@SpringBootApplication
public class DemoApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
 
}

3.新建一個job

@Slf4j
public class MyJob implements Job {
 
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        try {
          
            executeTask(jobExecutionContext);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //java fhadmin.cn
    private static void executeTask(JobExecutionContext jobExecutionContext) throws SchedulerException {
//JobExecutionContext 類提供了調(diào)度應用的一些信息;
//Job 運行時的信息保存在 JobDataMap 實例中。
 
        JobKey key = jobExecutionContext.getJobDetail().getKey();
        System.out.println(new Date()+"->"+key.toString()+"定時任務正在執(zhí)行");
 
 
    }
 
}

4.構(gòu)建JobDetailrigger

把Trigger 和 JobDetail 可以注冊到 Scheduler 中

//fhrom fhadmin.cn
@Configuration
public class QuartzManager {
 
   // public static final String JOB1="job1";
   // public static final String GROUP1="group1";
    /**默認每個星期凌晨一點執(zhí)行*/
    //public static final String DEFAULT_CRON="0 0 1 ? * L";
    /**默認5秒執(zhí)行一次*/
   // public static final String DEFAULT_CRON="*/5 * * * * ?";
 
    /**
     * 任務調(diào)度
     */
 
     private Scheduler scheduler;
 
     @Bean
    public Scheduler scheduler() throws SchedulerException {
        SchedulerFactory schedulerFactoryBean = new StdSchedulerFactory();
        this.scheduler = schedulerFactoryBean.getScheduler();
        return schedulerFactoryBean.getScheduler();
    }
    /**
     * 開始執(zhí)行定時任務
     */
    public void startJob(String name,String group,String time) throws SchedulerException {
        startJobTask(scheduler,name,group,time);
        scheduler.start();
    }
    /**
     * 啟動定時任務
     * @param scheduler
     */
    private void startJobTask(Scheduler scheduler,String  name ,String group,String time) throws SchedulerException {
                                                           //對于身份
        JobDetail jobDetail= JobBuilder.newJob(MyJob.class).withIdentity(name,group).build();
        System.out.println("jobDetail:-------------"+jobDetail);
 
        String DEFAULT_CRON="*/"+time+" * * * * ?";
        // SimpleScheduleBuilder  CronScheduleBuilder  用于構(gòu)建Scheduler,定義任務調(diào)度的時間規(guī)則
        CronScheduleBuilder cronScheduleBuilder=CronScheduleBuilder.cronSchedule(DEFAULT_CRON);
        //觸發(fā)器
        CronTrigger cronTrigger=TriggerBuilder.newTrigger().withIdentity(name,group)
                .withSchedule(cronScheduleBuilder).build();
        scheduler.scheduleJob(jobDetail,cronTrigger);
 
    }
 
    /**
     * 獲取Job信息
     * @param name
     * @param group
     */
    public String getjobInfo(String name,String group) throws SchedulerException {
        TriggerKey triggerKey=new TriggerKey(name,group);
        System.out.println("triggerKey:"+triggerKey);
        CronTrigger cronTrigger= (CronTrigger) scheduler.getTrigger(triggerKey);
        return String.format("time:%s,state:%s",cronTrigger.getCronExpression(),
                scheduler.getTriggerState(triggerKey).name());
    }
 
    /**
     * 修改任務的執(zhí)行時間
     * @param name
     * @param group
     * @param cron cron表達式
     * @return
     * @throws SchedulerException
     */
    public boolean modifyJob(String name,String group,String cron) throws SchedulerException{
        Date date=null;
        TriggerKey triggerKey=new TriggerKey(name, group);
        CronTrigger cronTrigger= (CronTrigger) scheduler.getTrigger(triggerKey);
        String oldTime=cronTrigger.getCronExpression();
        if (!oldTime.equalsIgnoreCase(cron)){
            CronScheduleBuilder cronScheduleBuilder=CronScheduleBuilder.cronSchedule(cron);
            CronTrigger trigger=TriggerBuilder.newTrigger().withIdentity(name,group)
                    .withSchedule(cronScheduleBuilder).build();
            date=scheduler.rescheduleJob(triggerKey,trigger);
        }
        return date !=null;
    }
 
    /**
     * 暫停所有任務
     * @throws SchedulerException
     */
    public void pauseAllJob()throws SchedulerException{
        scheduler.pauseAll();
    }
 
    /**
     * 暫停某個任務
     * @param name
     * @param group
     * @throws SchedulerException
     */
    public void pauseJob(String name,String group)throws SchedulerException{
        JobKey jobKey=new JobKey(name,group);
        JobDetail jobDetail=scheduler.getJobDetail(jobKey);
        if (jobDetail==null) {
            return;
        }
        scheduler.pauseJob(jobKey);
    }
 
    /**
     * 恢復所有任務
     * @throws SchedulerException
     */
    public void resumeAllJob()throws SchedulerException{
        scheduler.resumeAll();
    }
    /**
     * 恢復某個任務
     */
    public void resumeJob(String name,String group)throws SchedulerException {
        JobKey jobKey=new JobKey(name,group);
        JobDetail jobDetail=scheduler.getJobDetail(jobKey);
        if (jobDetail==null) {
            return;
        }
        scheduler.resumeJob(jobKey);
    }
 
    /**
     * 刪除某個任務
     * @param name
     * @param group
     * @throws SchedulerException
     */
    public void deleteJob(String name,String group)throws SchedulerException{
        JobKey jobKey=new JobKey(name, group);
        JobDetail jobDetail=scheduler.getJobDetail(jobKey);
        if (jobDetail==null) {
            return;
        }
        scheduler.deleteJob(jobKey);
    }
 
}

5.編寫Controller

通過調(diào)用接口 可以開始定時任務 結(jié)束定時任務 獲取任務信息

//fhadmin.cn
@RestController
@RequestMapping("/quartz")
public class ModifyCronController {
 
    @Autowired
    private QuartzManager quartzManager;
    @GetMapping("/modify")
    public String modify(@RequestParam("job")String job,   //job的名稱
                         @RequestParam("group")String group,//job的組
                         @RequestParam("time")String time   //執(zhí)行定時任務的步長
     ) throws SchedulerException {
       
       // quartzManager.pauseJob(QuartzManager.JOB1,QuartzManager.GROUP1);
        quartzManager.startJob(job,group,time);
        String s = quartzManager.getjobInfo(job, group);
        System.out.println("job:"+s);
 
        return "ok";
    }
}

到此這篇關(guān)于Spring Boot 配置 Quartz 定時任務的文章就介紹到這了,更多相關(guān)Spring Boot Quartz 定時任務內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java編程生產(chǎn)者消費者實現(xiàn)的四種方法

    Java編程生產(chǎn)者消費者實現(xiàn)的四種方法

    Java生產(chǎn)者和消費者問題是線程安全模型中的經(jīng)典問題:生產(chǎn)者和消費者在同一個時間段共用同一個存儲空間,生產(chǎn)者向存儲空間中添加產(chǎn)品呢,消費者取走產(chǎn)品,當存儲空間為空時,消費者阻塞,當存儲空間滿時,生產(chǎn)者阻塞
    2021-10-10
  • idea快速生成代碼配置的方法示例

    idea快速生成代碼配置的方法示例

    本文主要介紹了idea快速生成代碼配置的方法示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 關(guān)于ArrayList的動態(tài)擴容機制解讀

    關(guān)于ArrayList的動態(tài)擴容機制解讀

    這篇文章主要介紹了關(guān)于ArrayList的動態(tài)擴容機制解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Spring中的編程式事務和聲明式事務

    Spring中的編程式事務和聲明式事務

    Spring框架中,事務管理可以通過編程式事務和聲明式事務兩種方式實現(xiàn),編程式事務通過手動編碼控制事務的開始、提交和回滾,允許開發(fā)者精確控制事務,但增加了代碼復雜度,聲明式事務則通過@EnableTransactionManagement注解啟用事務管理
    2024-11-11
  • 詳解java中DelayQueue的使用

    詳解java中DelayQueue的使用

    這篇文章主要介紹了java中DelayQueue的使用,幫助大家更好的理解和學習Java,感興趣的朋友可以了解下
    2020-10-10
  • IDEA的run maven方式啟動步驟詳解

    IDEA的run maven方式啟動步驟詳解

    這篇文章主要介紹了IDEA的run maven方式啟動步驟,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • Java Calendar日歷類的使用介紹

    Java Calendar日歷類的使用介紹

    Candendar類是一個抽象類,提供了一些獲取當前時間,或者指定的時間的字段和一些方法,我們可以通過一些方法與字段對他進行獲取當前天或者當月的一些信息
    2022-09-09
  • 淺析springcloud 整合 zipkin-server 內(nèi)存日志監(jiān)控

    淺析springcloud 整合 zipkin-server 內(nèi)存日志監(jiān)控

    Zipkin是一款開源的分布式實時數(shù)據(jù)追蹤系統(tǒng)(Distributed Tracking System),其主要功能是聚集來自各個異構(gòu)系統(tǒng)的實時監(jiān)控數(shù)據(jù)。這篇文章主要介紹了springcloud 整合 zipkin-server 內(nèi)存日志監(jiān)控,需要的朋友可以參考下
    2019-11-11
  • Java實現(xiàn)學生成績輸出到磁盤文件的方法詳解

    Java實現(xiàn)學生成績輸出到磁盤文件的方法詳解

    這篇文章主要為大家詳細介紹了如何利用Java實現(xiàn)將學生成績輸出到磁盤文件的功能,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-11-11
  • spring整合cxf框架實例

    spring整合cxf框架實例

    下面小編就為大家?guī)硪黄猻pring整合cxf框架實例。小編覺得挺不錯的?,F(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06

最新評論