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可以用来创建简单或为运行十个,百个, ...
随机推荐
- java Random 随机密码
/** * Created by xc on 2019/11/23 * 生成随机密码:6位数字 */public class Test7_4 { public static void main(Str ...
- Spring Boot程序正确停止的姿势
Spring Boot提供了2种优雅关闭进程的方式: 基于管理端口关闭进程 基于系统服务方式关闭进程 基于管理端口关闭进程 基于管理端口方式实现进程关闭实际上是模块spring-boot-actuat ...
- SQL Server PARTITION FUNCTION(分区)
分区并不影响Linq,sql查询 在MSSQL中,选中目标表,右键-存储-创建分区 根据提示完成分区,存储成sql 这里展示如何根据Id的数据范围分区 在执行前,可能需要设置日志文件大小为" ...
- WIN10设置notepad++默认打开txt文件
修改txt的默认打开方式为notepad++.效果如下图所示 修改方式: 1.新建名称为OpenFromNotepad++的txt文档,并将后缀名修改为reg格式(注册表格式),在文件中输入以下内容. ...
- bridge和原生交互的简单用法
首先获取当前环境是ios还是Android var u = navigator.userAgent; var isAndroid = u.indexOf('Android') > -1 || u ...
- spark sc.textFile() 指定换行符
直接上代码 package com.jason.spark23 import org.apache.spark.sql.SparkSession import org.apache.spark.Spa ...
- Java的集合类之 map 接口用法
Map接口不是Collection接口的继承.而是从自己的用于维护键-值关联的接口层次结构入手.按定义,该接口描述了从不重复的键到值的映射. 我们可以把这个接口方法分成三组操作:改变.查询和提供可选视 ...
- webx入门
- Ribbon和Nignx的区别
Ribbon属于客户端负载均衡:在调用接口的时候,会通过服务别名到eureka上获取服务的信息列表,缓存到jvm本地,在本地采用RPC远程调用技术去调用接口,实现负载均衡.可以设置调用的规则是请求总数 ...
- 图论 --- 三维空间bfs
<传送门> [题目大意] 给你一个三维的迷宫,让你计算从入口走到出口最少步数. [题目分析] 其实和二维迷宫还是一样的,还是用队列来做,由于BFS算法一般是不需要回溯的,所以我们就用不着还 ...