quartz 定时调度实现

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

1.页面提供一个功能供用户设置自己的scheduler时间定时发送邮件对应把存储信息存入到数据库.

2.封装job具体信息对象 JobInfoVo

private Integer jobId;
private String jobName;
private String groupName;
private String triggerName;
private String triggerGroupName;
private String cronExpression;
private String targetObject;
private String targetMethod;
private Integer targetSubId;
private Integer jobStatus;
private String createId;
private String updateId;
private Timestamp createDate;
private Timestamp updateDate;

3.封装获取job具体信息JobDao

ArrayList<JobInfoVo> list = new ArrayList<>();

Connection con = null;
Statement stmt = null;
ResultSet rs = null;
try {
    con = JDBCUtil.getConnection();
    con.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
    stmt = con.createStatement();
    rs = stmt.executeQuery(GET_ALL_JOBS_SQL);
    while (rs.next()) {
        JobInfoVo job = new JobInfoVo();
        job.setJobId(rs.getInt(1));
        job.setJobName(rs.getString(2));
        job.setGroupName(rs.getString(3));
        job.setTriggerName(rs.getString(4));
        job.setTriggerGroupName(rs.getString(5));
        job.setCronExpression(rs.getString(6));
        job.setTargetObject(rs.getString(7));
        job.setTargetMethod(rs.getString(8));
        job.setTargetSubId(rs.getInt(9));
        job.setJobStatus(rs.getInt(10));
        job.setCreateId(rs.getString(11));
        job.setCreateDate(rs.getTimestamp(12));
        job.setUpdateId(rs.getString(13));
        job.setUpdateDate(rs.getTimestamp(14));
        list.add(job);
    }
} finally {
    JDBCUtil.closeResource(con, stmt, rs);
}

4. 重写org.quartz.Job接口唯一的方法execute(),在这个方法里面写要定时执行的代码。

public void execute(JobExecutionContext context){

   Map<String,JobInfoVo> jobInfos = JobService.getAllJobInfo()
    JobKey jobKey = context,getJobDetails().getKey();
    String jobName = jobKey.getName();
    if(jobName == null){
        return;
    }
    JobInfoVo jobInfo = jobInfos,get(jobName);
// jobInfo.getTargetObject() 就是对应要执行的类
    Class clazz = Class.forName(jobInfo.getTargetObject());
//对应类里面要执行的方法
    Method m = clazz.getDeclareMethod(jobInfo.getTargetMethod(),Integer.class,String.class);
// 方法中需要用到的参数
    m.invoke(clazz.newInstance(),jobInfo.getTargetSubId(),jobName);
}

5. 然后创建scheduler->创建JobDetail的实例指定执行哪个job->创建一个Trigger实例指定执行时间->最后将哪个job由哪个trigger触发安排设置进调度程序-任务执行计划表并启动它

private static SchedulerFactory gSchedulerFactory = new StdSchedulerFactory();
public static void addJob(String jobName,String jobGroupName,String triggerName,String triggerGroupName,Class<? extends Job> jobClass,String cron){
    Scheduler scheduler = gSchedulerFactory.getScheduler();
        if (!scheduler.isShutdown()) {
            scheduler.start();
        }

        JobKey jobkey = new JobKey(jobName, jobGroupName);

        if (!scheduler.checkExists(jobkey)) {
            JobDetail job = JobBuilder.newJob(jobClass)
                    .withIdentity(jobName, jobGroupName).build();

            Trigger trigger = TriggerBuilder.newTrigger()
                    .withIdentity(triggerName, triggerGroupName).startNow()
                    .withSchedule(CronScheduleBuilder.cronSchedule(cron))
                    .build();

            scheduler.scheduleJob(job, trigger);
        }
}
public static void removeJob(String jobName, String jobGroupName) throws SchedulerException {
        Scheduler sched = gSchedulerFactory.getScheduler();
        JobKey jobkey = new JobKey(jobName, jobGroupName);
        JobDetail jobDetail = sched.getJobDetail(jobkey);
        if (jobDetail == null)
            return;
        sched.pauseJob(jobkey);
        sched.deleteJob(jobkey);
    }

6.

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6