1. 程式人生 > >java後端定時任務框架(org.quartz)

java後端定時任務框架(org.quartz)

//從排程程式工廠獲取一個排程程式的例項
        Scheduler scheduler  = null;
        try {
            scheduler = StdSchedulerFactory.getDefaultScheduler();
            //顯示排程程式的名稱(這裡會展示我們在quartz.properties檔案中的名稱)
            System.out.println("scheduleName = " + scheduler.getSchedulerName());
            /** 重要:
             *  定義一個job,並繫結到我們自定義的HelloJob的class物件
             *  這裡並不會馬上建立一個HelloJob例項,例項建立是在scheduler安排任務觸發執行時建立的
             *  這種機制也為後面使用Spring整合提供了便利
             */
            String jobName="TestJob";
            String groupName="JobGroup";
            JobDetail job = JobBuilder.newJob(TestJob.class)
                    .withIdentity(jobName, groupName)
                    .build();

            // 宣告一個觸發器,現在就執行(schedule.start()方法開始呼叫的時候執行);並且每間隔2秒就執行一次
            Trigger trigger = TriggerBuilder.newTrigger()
                    .withIdentity("trigger", groupName)
                    .startNow()
                    .withSchedule(simpleSchedule()
                            .withIntervalInSeconds(2)
                            .repeatForever())
                    .build();
            String cron="1/10 * 15 * * ?";//在每天的15點,從1秒開始每隔10秒執行一次
            // 基於表示式構建觸發器
            CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cron);
            CronTrigger cronTrigger=TriggerBuilder.newTrigger().withIdentity(jobName,groupName).withSchedule(cronScheduleBuilder).build();
            // 告訴quartz使用定義的觸發器trigger安排執行任務job
//            scheduler.scheduleJob(job, trigger);
            scheduler.scheduleJob(job, cronTrigger);
            //啟動任務排程程式,內部機制是執行緒的啟動
            scheduler.start();


        } catch (SchedulerException e) {
            e.printStackTrace();
        }
//實現Job介面,任務執行是列印時間
public class TestJob implements Job {
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("TestJob execute___now Time :"+sdf.format(new Date()));
    }
}