怎么在scheduleonce 参数里传递参数

  前面写了关于Quartz.NET开源作业调度框架的入门和Cron Trigger , 这次继续这个系列, 这次想讨论一下Quartz.NET中的Job如何通过执行上下文(Execution Contex)进行参数传递 , 有些参数想保存状态该如何处理 . 在Quartz.NET中可以用JobDataMap进行参数传递.本例用Quartz.NET的任务来定期轮询数据库表,当数据库的条目达到一定的数目后,进行预警.(其实可以将读取的表和预警条件配置到数据库中的预警条件表中,这样就可以简单实现一个自动预警提醒的小平台).
1 JobWithParametersExample
2 using System.T
4 using Common.L
6 using Quartz.I
7 using Quartz.J
8 using Quartz.Impl.C
9 using Quartz.Impl.M
10 namespace QuartzDemo
public class JobWithParametersExample
public string Name
get { return GetType().N }
private IScheduler sched = null;
public JobWithParametersExample(IScheduler _sched)
public virtual void Run()
//2S后执行
DateTimeOffset startTime = DateBuilder.NextGivenSecondDate(null, 2);
IJobDetail job1 = JobBuilder.Create&JobWithParameters&()
.WithIdentity("job1", "group1")
ISimpleTrigger trigger1 = (ISimpleTrigger)TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.StartAt(startTime)
.WithSimpleSchedule(x =& x.WithIntervalInSeconds(5).WithRepeatCount(100))
// 设置初始参数
job1.JobDataMap.Put(JobWithParameters.tSQL, "SELECT * FROM [ACT_ID_USER]");
job1.JobDataMap.Put(JobWithParameters.ExecutionCount, 1);
// 设置监听器
JobListener listener = new JobListener();
IMatcher&JobKey& matcher = KeyMatcher&JobKey&.KeyEquals(job1.Key);
sched.ListenerManager.AddJobListener(listener, matcher);
// 绑定trigger和job
sched.ScheduleJob(job1, trigger1);
sched.Start();
  JobWithParametersExample用来配置job和trigger,同时定义了一个监听器,来监听定义的job.
2&JobWithParameters
2 using Common.L
4 using Quartz.I
5 using Quartz.J
6 using System.Windows.F
7 namespace QuartzDemo
[PersistJobDataAfterExecution]
[DisallowConcurrentExecution]
public class JobWithParameters : IJob
// 定义参数常量
public const string tSQL = "tSQL";
public const string ExecutionCount = "count";
public const string RowCount = "rowCount";
public const string tableAlert = "tAlert";
Quartz 每次执行时都会重新实例化一个类, 因此Job类中的非静态变量不能存储状态信息
private int counter = 1;//都为1
//private static
int counter = 1;//可以保存状态
public virtual void Execute(IJobExecutionContext context)
JobKey jobKey = context.JobDetail.K
// 获取传递过来的参数
JobDataMap data = context.JobDetail.JobDataM
string SQL = data.GetString(tSQL);
int count = data.GetInt(ExecutionCount);
if (isOpen("FrmConsole"))
//获取当前Form1实例
__instance = (FrmConsole)Application.OpenForms["FrmConsole"];
//获取当前执行的线程ID
__instance.SetInfo(jobKey + "Thread ID " + System.Threading.Thread.CurrentThread.ManagedThreadId.ToString());
//数据库操作
System.Data.DataTable tAlert = SqlHelper.getDateTable(SQL, null);
//回写条数
data.Put(RowCount, tAlert.Rows.Count);
//通过方法更新消息
__instance.SetInfo(string.Format("{0} exec {1} = {2} get {3} rows\r\n
execution count (from job map) is {4}\r\n
execution count (from job member variable) is {5}",
tAlert.Rows.Count,
count, counter));
//怎么取出Datatable ? json to datatable
//data.Put(tableAlert, tAlert);
catch (Exception ex)
Console.WriteLine(ex.Message);
// 修改执行计数并回写到job data map中
data.Put(ExecutionCount, count);
// 修改本地变量,如果是非静态变量,不能存储状态
counter++;
private static FrmConsole __instance = null;
/// &summary&
/// 判断窗体是否打开
/// &/summary&
/// &param name="appName"&&/param&
/// &returns&&/returns&
private bool isOpen(string appName)
FormCollection collection = Application.OpenF
foreach (Form form in collection)
if (form.Name == appName)
return true;
return false;
Quartz 每次执行时都会重新实例化一个类, 因此Job类中的非静态变量不能存储状态信息.如何要保存状态信息可以用静态变量进行处理,也可以用参数值进行传入传出来实现.
3&JobListener
2 using Common.L
4 using Quartz.I
5 using Quartz.J
6 namespace QuartzDemo
public class JobListener : IJobListener
public virtual string Name
get { return "JobListener"; }
public virtual void JobToBeExecuted(IJobExecutionContext inContext)
//执行前执行
Console.WriteLine("JobToBeExecuted");
public virtual void JobExecutionVetoed(IJobExecutionContext inContext)
//否决时执行
Console.WriteLine("JobExecutionVetoed");
public virtual void JobWasExecuted(IJobExecutionContext inContext, JobExecutionException inException)
JobKey jobKey = inContext.JobDetail.K
// 获取传递过来的参数
JobDataMap data = inContext.JobDetail.JobDataM
//获取回传的数据库表条目数
int rowCount = data.GetInt(JobWithParameters.RowCount);
if (rowCount & 9)
inContext.Scheduler.PauseAll();
System.Windows.Forms.MessageBox.Show("预警已超9条");
inContext.Scheduler.ResumeAll();
Console.WriteLine(rowCount.ToString());
catch (SchedulerException e)
Console.Error.WriteLine(e.StackTrace);
阅读(...) 评论()怎么在schedule里传递参数-学网-中国IT综合门户网站-提供健康,养生,留学,移民,创业,汽车等信息
> 信息中心 >
怎么在schedule里传递参数
来源:互联网 发表时间: 20:05:52 责任编辑:鲁晓倩字体:
为了帮助网友解决“怎么在schedule里传递参数”相关的问题,学网通过互联网对“怎么在schedule里传递参数”相关的解决方案进行了整理,用户详细问题包括:RT,我想知道:怎么在schedule里传递参数,具体解决方案如下:解决方案1:bind.cocos2d-x 3:,所以我们就可以用这个东西做很多很多的事了。我们可以将要回调的update函数多加上你要的几个参数。这里用到的CC_CALLBACK_1宏底层就,但是schedule中得要求函数的参数个数是一个啊,所以就用bind吧..0使用了c++11的新特性std
相关文章:
最新添加资讯
24小时热门资讯
Copyright © 2004- All Rights Reserved. 学网 版权所有
京ICP备号-1 京公网安备02号本帖子已过去太久远了,不再提供回复功能。【图文】schedule培训教程_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
schedule培训教程
上传于|0|0|暂无简介
大小:3.28MB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢怎么动态给targetMethod传参数? - ITeye问答
&!-- =======================================================================
=========================================================================--&
&bean id="subsidyJob"
class="com.payplat.dacq.scheduling.job.SubsidySchemeJob" /&
&!-- =======================================================================
JobDetail 定义
=========================================================================--&
&bean id="subsidyJobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"&
&property name="targetObject" ref="subsidyJob" /&
&property name="targetMethod" value="execute" /&
&property name="concurrent" value="false" /&
&!-- &property name="arguments" value="argsValue"/&--&
&!-- =======================================================================
Trigger 定义
(由方法动态生成)
=========================================================================--&
&!-- =======================================================================
配置调度器,容器启动就会执行调度程序;如果lazy-init='false',则容器启动时就会执行调度程序;
如果lazy-init='true',则需要实例化该bean才能执行调度程序
=========================================================================--&
&bean id="subsidyScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false"&
&!-- &property name="arguments" value="argsValue"/&--&
去掉上面的注释,如果我的exceute方法带了参数,如下:
//SubsidySchemeJob.java
public class SubsidySchemeJob
public void execute(String args) {
System.out.println("方案开始执行"+args);
程序运行后会打印:方案执行argsValue
从这里可以看出,可以传参给任务,现在我想在如下code
//SubsidyCronTrigger.java
@Service("SubsidyCronTrigger")
public class SubsidyCronTrigger {
@Autowired() @Qualifier("subsidyScheduler")
@Autowired() @Qualifier("subsidyJobDetail")
JobDetail jobD
* 添加计划
* @param triggerName
* @param cronExpression
* @throws SchedulerException
* @throws ParseException
public void createScheduleJob(String triggerName,String[] cronExpression) throws SchedulerException, ParseException {
for(int i = 0 ;i&cronExpression.i++){
CronTrigger cronTrigger = new CronTrigger(triggerName,"group"+i);
// setup CronExpression
CronExpression cexp = new CronExpression(cronExpression[i]);
// Assign the CronExpression to CronTrigger
cronTrigger.setCronExpression(cexp);
} catch (Exception e) {
e.printStackTrace();
jobDetail.setName("detail"+i);
scheduler.scheduleJob(jobDetail,cronTrigger);
scheduler.start();
//现在我想在动态生成trigger的时候把i(相当于一个flag)传给job里的execute,该怎么写呢?
public void subsidyTest(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-energydata.xml");
SubsidyCronTrigger ss = (SubsidyCronTrigger)context.getBean("SubsidyCronTrigger");
ss.createScheduleJob("test1", new String[]{"*/1 * * * * ?","*/3 * * * * ?"});
} catch (SchedulerException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
想多问一下,怎么样传递多个参数呢?看代码里面arguments是个数组,不知道xml配置文件中该怎么写才能传递多个参数。谢谢
设置参数使用 org.quartz.JobDetail.setJobDataMap(JobDataMap jobDataMap) 方法可以为job设置参数.
execute 方法是获取参数
public class KettleQuartzJob implements org.quartz.Job {
public void execute(JobExecutionContext context)
throws JobExecutionException {
JobDataMap dataMap = context.getJobDetail().getJobDataMap();
String type = dataMap.getString("type");
//...其他代码
已解决问题
未解决问题}

我要回帖

更多关于 cocos schedule 参数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信