日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jfinal整合quartz实现定时任务的两种方式

發布時間:2024/10/5 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jfinal整合quartz实现定时任务的两种方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第一種實現方式

1.導入包

<dependency>
?? ??? ? ? ?<groupId>org.quartz-scheduler</groupId>
?? ??? ? ? ?<artifactId>quartz</artifactId>
?? ??? ? ? ?<version>2.3.0</version>
?? ??? ?</dependency>

2:在myconfig中配置quartz插件:

QuartzPlugin quatrZPlugin = new QuartzPlugin();

me.add(quatrZPlugin);//定時任務插件

3.在根目錄下設置配置文件,我設置的目錄是src/main/resources

quartz_config.properties

#配置主要調度程序屬性

org.quartz.scheduler.instanceName = DefaultQuartzScheduler
org.quartz.scheduler.instanceId = AUTO
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.proxy = false
org.quartz.scheduler.wrapJobExecutionInUserTransaction = false
?

#配置線程池
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
?
#?配置任務
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.scheduler.skipUpdateCheck = true

?

4.在src/main/java下面編寫代碼

? ? 所需工具類有三個:FormaterCronExpression.java、QuartZKit.java、QuartzPlugin.java;需要一個實體類:JobBean.java;然后就可以編寫任務了,目錄結構如下圖:

(1),config配置類,

(2),任務實體類,

(3),任務實現類,

(4),工具類,

(5).配置文件。

JobBean.java:


public class JobBean {
?? ?/** 任務id */
?? ?private String jobId;
?
?? ?/** 任務描述 */
?? ?private String jobDesc;
?
?? ?/** 任務運行時間表達式 */
?? ?private String cronExpression;
?
?? ?/** 任務分組 */
?? ?private String jobGroup;
?
?? ?/** 任務類 */
?? ?private String jobClass;
?
?? ?public String getJobId() {
?? ??? ?return jobId;
?? ?}
?
?? ?public void setJobId(String jobId) {
?? ??? ?this.jobId = jobId;
?? ?}
?
?? ?public String getJobDesc() {
?? ??? ?return jobDesc;
?? ?}
?
?? ?public void setJobDesc(String jobDesc) {
?? ??? ?this.jobDesc = jobDesc;
?? ?}
?
?? ?public String getCronExpression() {
?? ??? ?return cronExpression;
?? ?}
?
?? ?public void setCronExpression(String cronExpression) {
?? ??? ?this.cronExpression = cronExpression;
?? ?}
?
?? ?public String getJobGroup() {
?? ??? ?return jobGroup;
?? ?}
?
?? ?public void setJobGroup(String jobGroup) {
?? ??? ?this.jobGroup = jobGroup;
?? ?}
?
?? ?public String getJobClass() {
?? ??? ?return jobClass;
?? ?}
?
?? ?public void setJobClass(String jobClass) {
?? ??? ?this.jobClass = jobClass;
?? ?}
?
?? ?public JobBean(String jobId, String jobDesc, String cronExpression, String jobGroup, String jobClass) {
?? ??? ?this.jobId = jobId;
?? ??? ?this.jobDesc = jobDesc;
?? ??? ?this.cronExpression = cronExpression;
?? ??? ?this.jobGroup = jobGroup;
?? ??? ?this.jobClass = jobClass;
?? ?}
?
?? ?public JobBean() {
?? ??? ?super();
?? ?}
}
?

FormaterCronExpression.java:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;



public class FormaterCronExpression {
?? ?static String formart = "yyyy-MM-dd HH:mm:ss";
?? ??
?? ?public static String formaterCronExpression(String date){
?? ??? ?SimpleDateFormat format = new SimpleDateFormat(formart.substring(0, date.length() - 1));
?? ??? ?SimpleDateFormat format2 = new SimpleDateFormat("yyyy MM dd HH mm ss");
?? ??? ?try {
?? ??? ??? ?Date d = format.parse(date);
?? ??? ??? ?date = format2.format(d);
?? ??? ??? ?String[] dateArry = date.split(" ");
?? ??? ??? ?String exp = dateArry[5] + " " + dateArry[4] + " " + dateArry[3] + " " + dateArry[2] + " " + dateArry[1]
?? ??? ??? ??? ??? ?+ " ? " + dateArry[0];
?? ??? ??? ?return exp;
?? ??? ?} catch (ParseException e) {
?? ??? ??? ?e.printStackTrace();
?? ??? ?}
?? ??? ?return "";
?? ?}
}
?

QuartZKit.java:

package com.pointlion.sys.plugin.quartz;

import com.pointlion.sys.plugin.quartz.bean.JobBean;


public class QuartZKit {
?? ?/***
?? ? * 動態添加任務
?? ? */
?? ?public static void addTask(String taskid , String closeTime){
?? ? ? ?JobBean job = new JobBean();
?? ? ? ?job.setJobClass("com.pointlion.sys.plugin.quartz.task.ResetYearHoliday");
?? ? ? ?job.setCronExpression(FormaterCronExpression.formaterCronExpression(closeTime));
?? ? ? ?job.setJobGroup("DakeTaskJob");
?? ? ? ?job.setJobDesc("DakeTaskJob_" + taskid);
?? ? ? ?QuartzPlugin.addJob(job);
?? ?}
}
?

QuartzPlugin.java:

package com.pointlion.sys.plugin.quartz;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory;

import com.jfinal.kit.PropKit;
import com.jfinal.kit.StrKit;
import com.jfinal.plugin.IPlugin;
import com.pointlion.sys.plugin.quartz.bean.JobBean;


public class QuartzPlugin implements IPlugin{

?? ?private List<JobBean> jobs = new ArrayList<JobBean>();
?? ?private SchedulerFactory sf;
?? ?private static Scheduler scheduler;
?? ?private String jobConfig;
?? ?private String confConfig;
?? ?private Map<Object, Object> jobProp;
?? ?
?? ?public QuartzPlugin(String jobConfig, String confConfig) {
?? ??? ?this.jobConfig = jobConfig;
?? ??? ?this.confConfig = confConfig;
?? ?}
?
?? ?public QuartzPlugin(String jobConfig) {
?? ??? ?this.jobConfig = jobConfig;
?? ??? ?this.confConfig = "quartz_config.properties";
?? ?}
?
?? ?public QuartzPlugin() {
?? ??? ?this.jobConfig = "quartz_job.properties";
?? ??? ?this.confConfig = "quartz_config.properties";
?? ?}
?
?? ?
?
?? ?@Override
?? ?public boolean start() {
?? ??? ?loadJobsFromProperties();
?? ??? ?startJobs();
?? ??? ?return true;
?? ?}
?? ?
?? ?
?? ?/***
?? ? * 從配置文件中加載任務
?? ? */
?? ?private void loadJobsFromProperties() {
?? ??? ?if (StrKit.isBlank(jobConfig)) {
?? ??? ??? ?return;
?? ??? ?}
?? ??? ?jobProp = PropKit.use(jobConfig).getProperties();
?? ??? ?String jobArray = (String) jobProp.get("jobArray");
?? ??? ?if (StrKit.isBlank(jobArray)) {
?? ??? ??? ?return;
?? ??? ?}
?? ??? ?String[] jobArrayList = jobArray.split(",");
?? ??? ?for (String jobName : jobArrayList) {
?? ??? ??? ?jobs.add(createJobBean(jobName));
?? ??? ?}
?? ?}
?? ?
?? ?private void startJobs() {
?? ??? ?try {
?? ??? ??? ?if (StrKit.notBlank(confConfig)) {
?? ??? ??? ??? ?sf = new StdSchedulerFactory(confConfig);
?? ??? ??? ?} else {
?? ??? ??? ??? ?sf = new StdSchedulerFactory();
?? ??? ??? ?}
?? ??? ??? ?scheduler = sf.getScheduler();
?? ??? ?} catch (SchedulerException e) {
?? ??? ??? ?e.printStackTrace();
?? ??? ?}
?? ??? ?for (JobBean entry : jobs) {
?? ??? ??? ?addJob(entry);
?? ??? ?}
?? ??? ?try {
?? ??? ??? ?scheduler.start();
?? ??? ?} catch (SchedulerException e) {
?? ??? ??? ?e.printStackTrace();
?? ??? ?}
?? ?}
?
?? ?public static void addJob(JobBean job) {
?? ??? ?try {
?? ??? ??? ?TriggerKey triggerKey = TriggerKey.triggerKey(job.getJobDesc(), job.getJobGroup());
?? ??? ??? ?CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
?? ??? ??? ?// 不存在,創建一個
?? ??? ??? ?if (null == trigger) {
?? ??? ??? ??? ?@SuppressWarnings("unchecked")
?? ??? ??? ??? ?Class<Job> j2 = (Class<Job>) Class.forName(job.getJobClass());
?? ??? ??? ??? ?JobDetail jobDetail = JobBuilder.newJob(j2).withIdentity(job.getJobDesc(), job.getJobGroup()).build();
?? ??? ??? ??? ?jobDetail.getJobDataMap().put("scheduleJob", job);
?
?? ??? ??? ??? ?// 表達式調度構建器
?? ??? ??? ??? ?CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression());
?
?? ??? ??? ??? ?// 按新的cronExpression表達式構建一個新的trigger
?? ??? ??? ??? ?trigger = TriggerBuilder.newTrigger().withIdentity(job.getJobDesc(), job.getJobGroup())
?? ??? ??? ??? ??? ??? ?.withSchedule(scheduleBuilder).build();
?? ??? ??? ??? ?try {
?? ??? ??? ??? ??? ?scheduler.scheduleJob(jobDetail, trigger);
?? ??? ??? ??? ?} catch (Exception e) {
?? ??? ??? ??? ??? ?e.printStackTrace();
?? ??? ??? ??? ?}
?? ??? ??? ?} else {
?? ??? ??? ??? ?// Trigger已存在,那么更新相應的定時設置
?? ??? ??? ??? ?// 表達式調度構建器
?? ??? ??? ??? ?CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression());
?
?? ??? ??? ??? ?// 按新的cronExpression表達式重新構建trigger
?? ??? ??? ??? ?trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();
?
?? ??? ??? ??? ?// 按新的trigger重新設置job執行
?? ??? ??? ??? ?scheduler.rescheduleJob(triggerKey, trigger);
?? ??? ??? ?}
?? ??? ?} catch (Exception e) {
?? ??? ?}
?? ?}
?
?? ?private JobBean createJobBean(String key) {
?? ??? ?JobBean job = new JobBean();
?? ??? ?job.setJobClass(jobProp.get(key + ".class").toString());
?? ??? ?job.setCronExpression(jobProp.get(key + ".cron").toString());
?? ??? ?job.setJobGroup(jobProp.get(key+ ".group").toString());
?? ??? ?job.setJobDesc(jobProp.get(key + ".desc").toString());
?? ??? ?return job;
?? ?}
?
?? ?@Override
?? ?public boolean stop() {
?? ??? ?try {
?? ??? ??? ?scheduler.shutdown();
?? ??? ?} catch (SchedulerException e) {
?? ??? ??? ?e.printStackTrace();
?? ??? ?}
?? ??? ?return true;
?? ?}

}
?

任務示例ResetYearHoliday

package com.pointlion.sys.plugin.quartz.task;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.Db;


public class ResetYearHoliday implements Job{
?? ?private static final Logger logger = LoggerFactory.getLogger(ResetYearHoliday.class); ?
?? ?@Override
?? ?public void execute(JobExecutionContext context) {
?? ??? ?logger.info("*****************************開始重置所有員工年假******************");
?? ??? ?Db.update("update sys_user set year_holiday = '"+PropKit.get("yearHoliday").trim()+"' where type='1'");
?? ??? ?logger.info("*****************************完成重置所有員工年假******************");
?? ?}

}
?

第一種定時任務實現代碼編寫結束,啟動項目即可運行。

?

第二種實現方式

?? ? ?前兩步和第一種實現方式一致,第三步中除了需要配置quartz_config.properties,配置內容和第一種方式中相同名字的配置文件內容一致;還需要配置quartz_job.properties,配置內容如下



quartz_job.properties

#配置第一個定時任務

#開啟的任務列表“,”隔開 實際上為group
#jobArray = CrawlDataPolicyTask
jobArray =CheckTimeTask
#搭客任務定時結束
#[秒] [分] [小時] [日] [月] [周] [年]
CheckTimeTask.class=com.pointlion.sys.plugin.quartz.task.CheckTimeTask
CheckTimeTask.group=CheckTimeTask
CheckTimeTask.cron=0 0 1 * * ?
CheckTimeTask.desc=\u6BCF\u5E74\u91CD\u7F6E\u5E74\u5047\u6570\u91CF

?

#配置第二個定時任務

jobArray =DemoTask
DemoTask.class=com.pointlion.sys.plugin.quartz.task.DemoTask
DemoTask.group=DemoTask
DemoTask.cron=0/10 * * * * ??
DemoTask.desc=\u6BCF\u5E74\u91CD\u7F6E\u5E74\u5047\u6570\u91CF

第四步所需要的工具類QuartzPlugin.java和實體類JobBean.java和第一種實現方式中的一致。

第五步,編寫定時任務內容,如下:

任務實例:DemoTask:


import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class DemoTask implements Job {

?? ?@Override
?? ?public void execute(JobExecutionContext arg0) throws JobExecutionException {
?? ??? ?System.out.println("##########開始定時任務##########");
?? ??? ?System.out.println("aaaaaaaaaaaaaa");
?? ??? ?System.out.println("##########結束定時任務##########");
?? ? ? ?
?? ?}
?? ?
}

?第二種定時任務代碼編寫結束,啟動項目即可運行。

總結

以上是生活随笔為你收集整理的jfinal整合quartz实现定时任务的两种方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。