Quartz动态参数传递 您所在的位置:网站首页 quartz参数 Quartz动态参数传递

Quartz动态参数传递

2023-10-12 23:04| 来源: 网络整理| 查看: 265

Quartz动态参数传递

参数传递

JobBuild创建jobDetail的时候,用setMapDate的方式,传递参数 然后可以再job类的描述,jobcontext中获得jobMapDate。

动态参数

思考?为什么普通的job中,运行的时候,数据是不变的?

因为触发器触动后,创建的是一个新的job实例,两个实例初始化的时候,并不会有参数共享的问题, 因为他们会自动重新初始化参数。

怎么动态设置?

很简单,防止内存中多个实例,防止同时修改,出现资源争夺, 二,进行参数共享设置。所以有以下两个注解

@PersistJobDataAfterExecution 共享JobData在执行后@DisallowConcurrentExecution 不允许并发

简单Demo代码

package quartz.two; import org.quartz.*; /** * @program: MybatisStudy * @description: 普通job * @author: cuteDog * @create: 2019-03-10 22:57 **/ @PersistJobDataAfterExecution @DisallowConcurrentExecution public class NormalJob implements Job { public NormalJob() { } public String page; public String ceshi; @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { dosay(); JobDataMap dataMap = jobExecutionContext.getJobDetail().getJobDataMap(); dataMap.put("page",page); dataMap.put("ceshi",ceshi); } public void dosay(){ System.out.println("page:"+page); System.out.println("ceshi:"+ceshi); Integer pageInt = Integer.parseInt(page); Integer ceshiInt=Integer.parseInt(ceshi); pageInt++; ceshiInt++; page=pageInt.toString(); ceshi=ceshiInt.toString(); System.out.println(page+"******"); System.out.println(ceshi+"******"); } public String getPage() { return page; } public void setPage(String page) { this.page = page; } public String getCeshi() { return ceshi; } public void setCeshi(String ceshi) { this.ceshi = ceshi; } } package quartz.two; import org.quartz.*; import org.quartz.impl.StdSchedulerFactory; /** * @program: MybatisStudy * @description: 定时任务配置类 * @author: cuteDog * @create: 2019-03-10 23:01 **/ public class QuartzConfig { public static void main(String[] args) throws SchedulerException { Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); JobDetail jobDetail = JobBuilder.newJob(NormalJob.class) .withIdentity("创建一个动态改变参数job") .withDescription("这是job描述") .usingJobData("page", "12") .usingJobData("ceshi", "11") .build(); CronTrigger trigger = TriggerBuilder.newTrigger() .withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ? *")) // SimpleScheduleBuilder.simpleSchedule() // .withIntervalInMilliseconds(2)) // .startNow() // .usingJobData("page", "12") // .usingJobData("ceshi", "11") .build(); scheduler.scheduleJob(jobDetail,trigger); scheduler.start(); // } }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有