JFinal框架_定时触发程序-阿里云开发者社区

开发者社区> 林新育> 正文

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

 







版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9497 0
x3d
PHP框架Swoole的一个定时器Timer特性
在各种业务型系统中,往往需要服务器在后台扫描相关数据,触发相应的统计、通知等操作。 比如对于一个项目管理系统,需要每天的特定时间内,统计每项任务的执行、到期情况、整个项目的进度等等,根据统计情况,做相应通知处理; 这样一个场景,如何编程实现? 用一般的编程方式,是无法实现自动触发与统计的。
1413 0
【JavaScript框架封装】在实现一个自己定义类似于JQuery的append()函数的时候遇到的问题及解决方案
版权声明:本文为博主原创文章,未经博主允许不得转载。更多学习资料请访问我爱科技论坛:www.52tech.tech https://blog.csdn.net/m0_37981569/article/details/81087543 主要问题: 在刚开始创建了这个函数之后,使用的时候,总是会出现一个问题,就是按照正常步骤给一个ID选择器添加子节点的时候正常,但是到了给一个class选择器的元素添加的时候始终只能添加一个。
850 0
JFinal框架单文件、多文件上传详解
版权声明:本文为博主原创文章,如需转载,请标明出处。 https://blog.csdn.net/alan_liuyue/article/details/79386540 简介  ...
2304 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13186 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
11508 0
spring框架的定时任务cronExpression表达式详解
附:cronExpression表达式解释: 0 0 12 * * ?---------------在每天中午12:00触发 0 15 10 ? * *---------------每天上午10:15 触发 0 15 1...
1356 0
Serverless 工作流定时触发工作流的应用框架及部署
Serverless 工作流本身没有提供定时触发工作流执行的功能,借助于函数计算 (FunctionCompute,简称 FC)的定时触器可以很方便的实现工作流定时调用。本文介绍如何使用 Serverless 工作流提供的定时触发工作流应用,来达到定时执行工作流的目的。
529 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
6895 0
+关注
27
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载