JFinal框架_定时触发程序

简介: JFinal框架进行作业调度,使用JFinal-ext2与quartzf进行配置。maven说明: com.jfinal jfinal 3.2 com.jfinal jfinal-ext2 2.

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());
    }
}

 







目录
相关文章
|
12天前
|
前端开发 JavaScript UED
JFinal框架中防止表单重复提交的方法
每种方法都有其优势和局限性。Token机制能提供较为稳定可靠的保护,但增加了服务器端的处理负担。锁定机制在处理并发请求时更有效,但可能导致用户体验的下降。JavaScript客户端控制提供了良好的用户体验,但依赖于客户端的执行环境。在实际应用中,可以根据具体的场景和需求,选择最适合的方法,或者将多种方法组合使用,以达到最佳的效果。
20 10
|
JavaScript 前端开发 Java
JFinal框架单文件、多文件上传详解
版权声明:本文为博主原创文章,如需转载,请标明出处。 https://blog.csdn.net/alan_liuyue/article/details/79386540 简介  ...
2758 0
|
Java PHP Spring
从今天开始,要入jfinal的坑了,试试这破框架好不好用。
公司要用jfinal,所以我要入坑了。 听说时去年很火的java框架,不知好不好,试试水吧。 看官网就想吐槽 看个文档吧,还要注册。。。现在是2017年吗?? 好吧,注册完了,接着就。
2004 0
|
Java 数据格式 XML
jfinal框架文件下载功能代码
版权声明:本文为博主原创文章,如需转载,请标明出处。 https://blog.csdn.net/alan_liuyue/article/details/72779838 一. 前言   上一篇博客我们了解了struts2框架的文件下载功能代码,我们可以从中总结到,struts2主要是通过其xml的配置来处理文件下载的,也就是将普通io流文件下载的页面响应方式的这部分代码分离出来,使用xml配置来处理,这也是struts2的特性。
1739 0
|
Java
基于Java的JFinal框架快速上手
http://finalshares.com/read-737
1160 0
|
Oracle 关系型数据库 Java
jfinal框架教程-学习笔记(二)
上一节介绍了jfinal框架的简单搭建,这节通过一个小例子了解jfinal的结构和特点 先上图 1、建数据库(我用的是oracle数据库,其他的相对也差不多) -- Create table create table CLASSES ( classesid NUMB...
1294 0
|
XML Java 数据格式
快速的搭建JFinal的ORM框架示例
  分类: Java2013-12-11 20:55 11075人阅读 评论(12) 收藏 举报 刚把Spring MVC搭建完毕,在群里一个人问如何搭建JFinal + Httl,我就先打架了一个JFinal环境。
1171 0
|
4月前
|
XML 中间件 数据库
基于jeecgboot的flowable流程支持定时捕获事件
基于jeecgboot的flowable流程支持定时捕获事件
61 0