java定时任务插件_jfinal定时调度任务插件QuartzPlugin
jfinal与quartz结合。
即可以在配置文件中配置定时任务。又可动态添加新的定时任务。
使用中的项目:
依赖jar包:quartz-2.0.2.jar
其他的依赖自己稍微改下就可以
quartz_config.properties(quartz配置)
#============================================================================
# 配置主要调度程序属性
#============================================================================
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
quartz_job.properties(任务配置,默认的调度任务可以在这里添加)
#开启的任务列表“,”隔开
jobArray = task1,task2
#搭客任务定时结束
task1.job=com.momoda.quartz.Task1
task1.cron=00 00 23 * * ?
task1.desc=任务1
#归档登录日志
task2.job=com.momoda.quartz.Task2
task2.cron=00 00 04 * * ?
task2.desc=任务2
FormaterCronExpression.java(日期转cron定时表达式类)
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) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "";
}
}
JobBean.java(任务对象实体bean)
/**
* 计划任务信息
*/
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();
}
}
QuartzPlugin.java(插件类)
public class QuartzPlugin implements IPlugin {
private List jobs = new ArrayList();
private SchedulerFactory sf;
private static Scheduler scheduler;
private String jobConfig;
private String confConfig;
private Map 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";
}
public static void addJob(JobBean job) {
try {
TriggerKey triggerKey = TriggerKey.triggerKey(job.getJobDesc(), job.getJobGroup());
CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
// 不存在,创建一个
if (null == trigger) {
Class j2 = (Class) 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) {
}
}
@Override
public boolean start() {
loadJobsFromProperties();
startJobs();
return true;
}
private void startJobs() {
try {
if (StrKit.notBlank(confConfig)) {
sf = new StdSchedulerFactory(confConfig);
} else {
sf = new StdSchedulerFactory();
}
scheduler = sf.getScheduler();
} catch (SchedulerException e) {
Throwables.propagate(e);
}
for (JobBean entry : jobs) {
addJob(entry);
}
try {
scheduler.start();
} catch (SchedulerException e) {
Throwables.propagate(e);
}
}
private void loadJobsFromProperties() {
if (StrKit.isBlank(jobConfig)) {
return;
}
jobProp = ResourceKit.readProperties(jobConfig);
String jobArray = jobProp.get("jobArray");
if (StrKit.isBlank(jobArray)) {
return;
}
String[] jobArrayList = jobArray.split(",");
for (String jobName : jobArrayList) {
jobs.add(createJobBean(jobName));
}
}
private JobBean createJobBean(String key) {
JobBean job = new JobBean();
job.setJobClass(jobProp.get(key + ".job"));
job.setCronExpression(jobProp.get(key + ".cron"));
job.setJobGroup(jobProp.get(key));
job.setJobDesc(jobProp.get(key + ".desc"));
return job;
}
@Override
public boolean stop() {
try {
scheduler.shutdown();
} catch (SchedulerException e) {
Throwables.propagate(e);
}
return true;
}
}
configPlugin方法中将插件启动就可以
动态添加定时任务
JobBean job = new JobBean();
job.setJobClass("com.momoda.quartz.DakeTaskJob");
job.setCronExpression(FormaterCronExpression.formaterCronExpression(task.getStr("closingTime")));
job.setJobGroup("DakeTaskJob");
job.setJobDesc("DakeTaskJob_" + taskid);
QuartzPlugin.addJob(job);
java定时任务插件_jfinal定时调度任务插件QuartzPlugin相关推荐
- java定时任务,每天定时执行任务
java定时任务,每天定时执行任务.以下是这个例子的全部代码. public class TimerManager {//时间间隔private static final long PERIOD_DA ...
- java 定时任务spring_Spring实现定时任务调度
spring的配置: 要定时执行的方法: public class HelloTask { public void say(){ Date date = new Date(); SimpleDateF ...
- java实现每天定时执行任务,Java之——实现每天定时执行任务
今天,十一长假的第三天,给大家带来一篇Java实现每天定时执行任务的文章,对于Java实现定时任务,相信大家并不陌生了,今天给大家带来的最基础的基于Timer的定时任务实现,好,我们直接进入正题了: ...
- java定时调度main方法_java相关:Spring中实现定时调度的几种方法
java相关:Spring中实现定时调度的几种方法 发布于 2020-11-28| 复制链接 本篇文章主要介绍了Spring中实现定时调度示例,可以在无人值守的时候系统可以在某一时刻执行某些特定的功能 ...
- java集群调度_集群环境下定时调度的解决方案之Quartz集群
集群环境可能出现的问题 在上一篇博客我们介绍了如何在自己的项目中从无到有的添加了Quartz定时调度引擎,其实就是一个Quartz 和Spring的整合过程,很容易实现,但是我们现在企业中项目通常都是 ...
- java quartz timer_Java 定时调度TimerQuartz
目录 三.Quartz 一.Java定时任务介绍 在Java中,用得比较多的有两种,一个是Timer,一个是Quartz: 其中Timer是这是jdk自带的类库,一般用来实现简单的定时调度,由一个后台 ...
- java的知识点34——任务定时调度(多线程)
任务定时调度(多线程) 通过Timer 和Timertask,可以定时启动某个线程 java.util.Timer :类似闹钟的功能,本身实现的就是一个线程 java.util.TimerTask: ...
- Java 程序员必备的 Intellij IDEA 插件
来源:柠檬学园 以下是我用过不错的Intellij插件,分享给大家希望能帮到大家. 1. .ignore 地址: https://plugins.jetbrains.com/plugin/7495-- ...
- 【Java多线程】高级主题:定时调度、quartz、指令重排、volatile、ThreadLocal
定时调度 1000ms后执行 每隔500ms执行一次 package cn.hanquan.test;import java.util.Timer; import java.util.TimerTas ...
- java可视化插件_java的WindowBuilder可视化插件
一直做在安卓用xml作界面,对于java的控件不熟悉,也不习惯用代码做UI尤其是布局. 找了一下发现可以安装windowbuilder来实现java的可视化编程,但是很多资料里的连接都失效了. 刚自己 ...
最新文章
- R语言ggplot2可视化使用vjust和hjust参数对齐图像中的文本注释信息(左对齐、右对齐、居中)实战
- jsp页面textarea中换行替换问题
- [C++11]通过using定义基础类型和函数指针别名
- linux c c 常用的日志库,mslog: 一款超轻量级的C日志库,无需依赖额外的库,测试或移植过的系统有Linux(ubuntu,centos),Windows以及部分嵌入式设备;...
- JSP——Web应用
- bzoj 2821:作诗 分块
- sql server 面试_SQL Server复制面试问题与解答
- grafana 安装- 曲线图展示每秒新增数据量
- android - 使用Parcelable序列化
- elementui tree获取父节点_elementUI 树状图 点击子节点获取父节点
- Linux下DHCP服务的配置相关参数说明
- 转---《C#画线控件的开发应用实例解析》
- 上班划水,给男朋友做个数字炸弹游戏
- 用gsm模块自动收发短信
- 如何做到在子线程更新 UI?
- C语言四分位数Quartile算法(附完整源码)
- “超人”为什么最后1秒拯救地球?
- IDEA远程提交hadoop任务时出现的错误
- 《Pro SQL Server Internals, 2nd edition》节选翻译(4)
- 阿里年薪50WJAVA工程师转大数据学习路线!