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+"\t"+test2+"\t"+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的增删改查,以及启动或者关闭状态的控制
看是看出来点意思,但是还没有实践,这因该是任务较多的时候这样配置,感觉任务很少的情况并没有必要。
quartz——JobExecutionContext和JobDataMap的更多相关文章
- 浅谈JobExecutionContext与JobDataMap
1.JobExecutionContext简介 (1)当Scheduler调用一个Job,就会将JobExecutionContext传递给job的execute方法 quartz无法调用job的有参 ...
- [异常笔记]required a bean of type 'org.quartz.JobExecutionContext' that could not be found
*************************** APPLICATION FAILED TO START *************************** Description: Par ...
- 浅谈JobExecutionContext & JobDataMap
JobExecutionContext是什么? 当Scheduler调用一个Job,就会将JobExecutionContext传递给Job的 execute() 方法: Job能通过JobExecu ...
- [Quartz笔记]玩转定时调度
简介 Quartz是什么? Quartz是一个特性丰富的.开源的作业调度框架.它可以集成到任何Java应用. 使用它,你可以非常轻松的实现定时任务的调度执行. Quartz的应用场景 场景1:提醒和告 ...
- Spring 4 + Quartz 2.2.1 Scheduler Integration Example
In this post we will see how to schedule Jobs using Quartz Scheduler with Spring. Spring provides co ...
- Quartz任务调度基本使用
转自:http://www.cnblogs.com/bingoidea/archive/2009/08/05/1539656.html 上一篇:定时器的实现.Java定时器Timer和Quartz介绍 ...
- Quartz 在 Spring 中如何动态配置时间--转
原文地址:http://www.iteye.com/topic/399980 在项目中有一个需求,需要灵活配置调度任务时间,并能自由启动或停止调度. 有关调度的实现我就第一就想到了Quartz这个开源 ...
- quartz集群分布式(并发)部署解决方案-Spring
项目中使用分布式并发部署定时任务,多台跨JVM,按照常理逻辑每个JVM的定时任务会各自运行,这样就会存在问题,多台分布式JVM机器的应用服务同时干活,一个是加重服务负担,另外一个是存在严重的逻辑问题, ...
- Quartz 入门详解
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十个,百个, ...
随机推荐
- 僵尸进程bug排除方法
多进程处理存在的问题 直接return 200 子进程 signal.signal(signal.SIGCHLD, signal.SIG_IGN) #不管子进程,不然R的多进程切图会产生僵尸进程
- 数据结构各种算法实现(C++模板)
目 录 1.顺序表 1 Seqlist.h 1 Test.cpp 6 2.单链表 8 ListNode.h 8 SingleList.h 10 test.cpp ...
- dotnet core swagger filter 隐藏接口和显示枚举描述
dotnet core 2.2开发项目中,常会使用Swagger UI来生成在线Api文档. 某些接口不想放到Swagger中可以这样写Filter: /// <summary> /// ...
- DevExpress XtraReport - 动态加载报表布局模板
XtraReport的报表模板文件是.repx,下面的代码演示动态加载报表布局模板. XtraReport mReport = new XtraReport(); mReport.LoadLayout ...
- POWER 740硬盘更换步骤
把mirror解掉,再从rootvg里面提出来,再用diag确认下,再用命令删掉hdisk1,更换 更换前的准备 1.查看报错日志. 执行errpt列出报错条目 IDENTIFIER TIMESTAM ...
- log4j Logger 使用简介
项目结构: log4j.properties 内容: log4j.rootCategory=info,stdout log4j.appender.stdout=org.apache.log4j.Con ...
- (CSDN迁移) JAVA多线程实现-可控最大并发数线程池(newFixedThreadPool)
上篇文章中介绍了单线程化线程池newSingleThreadExecutor,可控最大并发数线程池(newFixedThreadPool)与其最大的区别是可以通知执行多个线程,可以简单的将newSin ...
- 世界视频编码器大赛结果揭晓,腾讯V265编码器勇夺两项第一
2019年10月22日,由莫斯科国立大学(Moscow State University)举办的MSU世界视频编码器大赛成绩揭晓, 腾讯内部开源协同的V265编码器再创佳绩,一举拿下PSNR(峰值信噪 ...
- spring mvc 处理pojo传递对象时该对象继承父类的属性在网络接收端接收该属性值总是null,why?
//=========================== 情形一: ===============================//在网络上传递User1类对象时info属性值在网络的另一端能够接 ...
- C++对象模型:单继承,多继承,虚继承,菱形虚继承,及其内存布局图
C++目前使用的对象模型: 此模型下,nonstatic数据成员被置于每一个类的对象中,而static数据成员则被置于类对象之外,static和nonstatic函数也都放在类对象之外(通过函数指针指 ...