JFinal架構進行作業排程,使用JFinal-ext2與quartzf進行配置。
maven說明:
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jfinal</artifactId>
<version>3.2</version>
</dependency>
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jfinal-ext2</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.1.1</version>
</dependency>
Config.java配置(插件)
public void configPlugin(Plugins me) {
QuartzPlugin quartzPlugin = new QuartzPlugin("job.properties");
me.add(quartzPlugin);
}
job.properties配置(每天14:48:10 排程作業):
#JobA
a.job=com.fwpsl.util.Test1
a.cron=10 48 14 * * ?
a.enable=true
Test1.java
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class Test1 implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
//排程作業内容
System.out.println("任務1:"+CommonUtils.getDate());
}
}
使用quartz插件進行作業排程
QuartzManager.java
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import static org.quartz.CronScheduleBuilder.cronSchedule;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;
/**
* Created by fwpsl on 2017/10/16.
*/
public class QuartzManager {
public static QuartzManager qm=new QuartzManager();
private Logger log = LogManager.getLogger(QuartzManager.class);
private Scheduler scheduler = null;
private QuartzManager() {
try {
scheduler = new StdSchedulerFactory().getScheduler();
log.info("初始化排程器 ");
} catch (SchedulerException ex) {
log.error("初始化排程器=> [失敗]:" + ex.getLocalizedMessage());
}
}
//添加任務
public void addJob(String name, String group, Class<? extends Job> clazz, String cronExpression) {
try {
// 構造任務
JobDetail job = newJob(clazz).withIdentity(name, group).build();
// 構造任務觸發器
Trigger trg = newTrigger().withIdentity(name, group).withSchedule(cronSchedule(cronExpression)).build();
// 将作業添加到排程器
scheduler.scheduleJob(job, trg);
log.info("建立作業=> [作業名稱:" + name + " 作業組:" + group + "] ");
System.out.println("建立作業=> [作業名稱:" + name + " 作業組:" + group + "] ");
} catch (SchedulerException e) {
e.printStackTrace();
log.error("建立作業=> [作業名稱:" + name + " 作業組:" + group + "]=> [失敗]");
}
}
//移除任務
public void removeJob(String name, String group) {
try {
TriggerKey tk = TriggerKey.triggerKey(name, group);
scheduler.pauseTrigger(tk);// 停止觸發器
scheduler.unscheduleJob(tk);// 移除觸發器
JobKey jobKey = JobKey.jobKey(name, group);
scheduler.deleteJob(jobKey);// 删除作業
log.info("删除作業=> [作業名稱:" + name + " 作業組:" + group + "] ");
System.out.println("删除作業=> [作業名稱:" + name + " 作業組:" + group + "] ");
} catch (SchedulerException e) {
e.printStackTrace();
log.error("删除作業=> [作業名稱:" + name + " 作業組:" + group + "]=> [失敗]");
}
}
public void start() {
try {
scheduler.start();
log.info("啟動排程器 ");
System.out.println("啟動排程器 ");
} catch (SchedulerException e) {
e.printStackTrace();
log.error("啟動排程器=> [失敗]");
}
}
public void shutdown() {
try {
scheduler.shutdown();
log.info("停止排程器 ");
System.out.println("停止排程器 ");
} catch (SchedulerException e) {
e.printStackTrace();
log.error("停止排程器=> [失敗]");
}
}
//測試
public static void main(String[] args) throws InterruptedException{
QuartzManager qm = QuartzManager.qm;
String name = "DynamicJobName";
String group = "DynamicJobGroup";
String cronExpression = "*/2 * * * * ?";
String className = "com.fwpsl.util.Test1";
Class<? extends Job> jobClazz = null;
try {
jobClazz = Class.forName(className).asSubclass(Job.class);
} catch (Exception e) {
System.out.println(className+"沒有繼承job,e=="+e);
}
if(jobClazz==null){
System.exit(0);
}
qm.addJob(name, group, jobClazz, cronExpression);
qm.start();
Thread.sleep(9000);
String name2 = "DynamicJobName2";
String group2 = "DynamicJobGroup2";
String cronExpression2 = "*/1 * * * * ?";
qm.addJob(name2, group2, Test2.class, cronExpression2);
Thread.sleep(5000);
qm.removeJob(name, group);
Thread.sleep(5000);
qm.shutdown();
}
}
Test1.java
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class Test1 implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("任務1:"+CommonUtils.getDate());
}
}
Test2.java
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class Test2 implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("任務2:"+CommonUtils.getDate());
}
}