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

  • 相关阅读:
    Java异常处理机制(转)
    深入探讨 java.lang.ref 包(转)
    一篇不错的讲解Java异常的文章
    Java国际化学习(一)介绍
    Java泛型集合排序(转)
    Java常见异常总结 (转)
    java中的异常处理机制
    深入分析 Java I/O 的工作机制(转)
    java里BufferedReader和Scanner
    JS深入学习知识整理
  • 原文地址:https://www.cnblogs.com/yzyBalance/p/11240917.html
Copyright © 2020-2023  润新知