quartz——JobExecutionContext和JobDataMap

控制器传值,需要根据对应值创建,启动以及对定时任务的相关操作:JobExecutionContext和JobDataMap基本用法,代码待优化,主要是用法吧
第一:控制器,

@RequestMapping("/stopTable")
public String stopTableBei(String tableName,String cron){
String result = "error";
try{
    JobService.job(tableName,String cron);//将变量传入service
    result = "ok";
}catch (Exception e){
    e.printStackTrace();
}
return result;
}

第二:service层


//装载调度器
@Autowired
Scheduler scheduler;

public
void job(String tableName) throws SchedulerException, InterruptedException { // 定义一个触发器 Trigger trigger = newTrigger().withIdentity("trigger1", "group1") // 定义名称和所属的租 .startNow() //可以链式定义多个值 .usingJobData("test1","Str") .usingJobData("test2",true) .usingJobData("test3",'女') .withSchedule(cronSchedule(cron)) //待优化点 .build(); // 定义一个JobDetail JobDetail job = newJob(MailJob.class) // 指定干活的类MailJob .withIdentity("mailjob1", "mailgroup") // 定义任务名称和分组 .usingJobData("email", "admin@110.com") // 定义属性 .usingjobdata("tableName",tableName)//存入传过来的值 .build(); // 调度加入这个job scheduler.scheduleJob(job, trigger); System.out.println("当前调度器的id是:"+scheduler.getSchedulerInstanceId()); // 启动 scheduler.start(); }

第三:job类

@Configuration
@DisallowConcurrentExecution
@PropertySource("classpath:quartz.properties")
public class MyJob implements Job {
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
    //SimpleFormateSimpleDateFormat smf = new SimpleDateFormat("yyyyMMdd_HHmmss");
    //System.out.println(smf.format(new Date().getTime()));
    //根据值类型和键获取对应值 trigger
    String test1 = context.getTrigger().getJobDataMap().getString("test1");//根据键获取String值
    Boolean test2 = context.getTrigger().getJobDataMap().getBoolean("test2");//根据键获取boolean值
    Char test3 = context.getTrigger().getJobDataMap().getChar("test3");//根据键获取Char值
    System.out.println(test1+"	"+test2+"	"+test3);
    //根据值类型和键获取对应值 job
    String tableName = context.getJobDetail().getJobDataMap().getString("tableName");//取传过来的值
    context.getJobDetail().getJobDataMap().getString("email");//二者只是.getJobDetail()和.getTrigger()的不同
    }
}

这样不仅可以传值,对于相同但是仅仅是操作对象不同的job,只用实现一个Job的类就够了,

对于JobExecutionContext context这个存放上下文信息的对象可以获取到的信息还有很多,配置JobDetail和Trigger的所有信息都可以获取,这里只写了获取自己传的参数

以上代码是还可以有dao层,还有专门存放任务的数据库,网上看到几个厉害的家伙博客是存放数据库的 大家可以看下

https://www.cnblogs.com/skyLogin/p/6915921.html  ,

https://blog.csdn.net/m0_37872161/article/details/77773966

实现对job的增删改查,以及启动或者关闭状态的控制
看是看出来点意思,但是还没有实践,这因该是任务较多的时候这样配置,感觉任务很少的情况并没有必要。

原文地址:https://www.cnblogs.com/yzyBalance/p/11240917.html