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相关推荐

  1. java定时任务,每天定时执行任务

    java定时任务,每天定时执行任务.以下是这个例子的全部代码. public class TimerManager {//时间间隔private static final long PERIOD_DA ...

  2. java 定时任务spring_Spring实现定时任务调度

    spring的配置: 要定时执行的方法: public class HelloTask { public void say(){ Date date = new Date(); SimpleDateF ...

  3. java实现每天定时执行任务,Java之——实现每天定时执行任务

    今天,十一长假的第三天,给大家带来一篇Java实现每天定时执行任务的文章,对于Java实现定时任务,相信大家并不陌生了,今天给大家带来的最基础的基于Timer的定时任务实现,好,我们直接进入正题了: ...

  4. java定时调度main方法_java相关:Spring中实现定时调度的几种方法

    java相关:Spring中实现定时调度的几种方法 发布于 2020-11-28| 复制链接 本篇文章主要介绍了Spring中实现定时调度示例,可以在无人值守的时候系统可以在某一时刻执行某些特定的功能 ...

  5. java集群调度_集群环境下定时调度的解决方案之Quartz集群

    集群环境可能出现的问题 在上一篇博客我们介绍了如何在自己的项目中从无到有的添加了Quartz定时调度引擎,其实就是一个Quartz 和Spring的整合过程,很容易实现,但是我们现在企业中项目通常都是 ...

  6. java quartz timer_Java 定时调度TimerQuartz

    目录 三.Quartz 一.Java定时任务介绍 在Java中,用得比较多的有两种,一个是Timer,一个是Quartz: 其中Timer是这是jdk自带的类库,一般用来实现简单的定时调度,由一个后台 ...

  7. java的知识点34——任务定时调度(多线程)

    任务定时调度(多线程) 通过Timer 和Timertask,可以定时启动某个线程 java.util.Timer  :类似闹钟的功能,本身实现的就是一个线程 java.util.TimerTask: ...

  8. Java 程序员必备的 Intellij IDEA 插件

    来源:柠檬学园 以下是我用过不错的Intellij插件,分享给大家希望能帮到大家. 1. .ignore 地址: https://plugins.jetbrains.com/plugin/7495-- ...

  9. 【Java多线程】高级主题:定时调度、quartz、指令重排、volatile、ThreadLocal

    定时调度 1000ms后执行 每隔500ms执行一次 package cn.hanquan.test;import java.util.Timer; import java.util.TimerTas ...

  10. java可视化插件_java的WindowBuilder可视化插件

    一直做在安卓用xml作界面,对于java的控件不熟悉,也不习惯用代码做UI尤其是布局. 找了一下发现可以安装windowbuilder来实现java的可视化编程,但是很多资料里的连接都失效了. 刚自己 ...

最新文章

  1. R语言ggplot2可视化使用vjust和hjust参数对齐图像中的文本注释信息(左对齐、右对齐、居中)实战
  2. jsp页面textarea中换行替换问题
  3. [C++11]通过using定义基础类型和函数指针别名
  4. linux c c 常用的日志库,mslog: 一款超轻量级的C日志库,无需依赖额外的库,测试或移植过的系统有Linux(ubuntu,centos),Windows以及部分嵌入式设备;...
  5. JSP——Web应用
  6. bzoj 2821:作诗 分块
  7. sql server 面试_SQL Server复制面试问题与解答
  8. grafana 安装- 曲线图展示每秒新增数据量
  9. android - 使用Parcelable序列化
  10. elementui tree获取父节点_elementUI 树状图 点击子节点获取父节点
  11. Linux下DHCP服务的配置相关参数说明
  12. 转---《C#画线控件的开发应用实例解析》
  13. 上班划水,给男朋友做个数字炸弹游戏
  14. 用gsm模块自动收发短信
  15. 如何做到在子线程更新 UI?
  16. C语言四分位数Quartile算法(附完整源码)
  17. “超人”为什么最后1秒拯救地球?
  18. IDEA远程提交hadoop任务时出现的错误
  19. 《Pro SQL Server Internals, 2nd edition》节选翻译(4)
  20. 阿里年薪50WJAVA工程师转大数据学习路线!

热门文章

  1. 开务正式加入中国信通院数据库应用创新实验室
  2. 关于修改esp8266波特率sscom32串口调试窗口没反应解决方案
  3. IIS错误 ‘80040e21‘ ODBC 驱动程序不支持所需的属性
  4. 数据结构--二叉树的二叉链表实现
  5. 喜马拉雅下载成mp3方法
  6. 《数据结构题集》习题解析
  7. 一些电子海圈领域概念名词的桩理
  8. C4D建模宝典R20笔记
  9. mac 电脑安装 svn和brew
  10. 小福利,PMP考试真题刷起来,人人都当项目管理大师!