当学完第2课之后,你欢快的开采,让jobs职业起来是照旧1对一简单的。就算让jobs运维起来一点也不细略,对于其推行的首要内容照旧必要知道的。它们是IJob接口中的Execute和JobDetails。

当学完第1课之后,你称心快意的发掘,让jobs专业起来是还是一对一简单的。即便让jobs运转起来很简单,对于其进行的严重性内容依旧供给通晓的。它们是IJob接口中的Execute和JobDetails。

style=”font-size: 16px;”> Quartz.NET快捷上手第1课(官方网址文书档案翻译)

style=”font-size: 16px;”> Quartz.NET飞速上手第二课(官方网站文书档案翻译)

 

 

       

       

当您定义3个落成IJob接口的类的时候,你要求在里面完毕实际须要实施的代码。Quartz.NET须要驾驭关于那代码的各类信息,这样 Quartz.NET才具像您愿意的那么行事。这一个细节是在JobDetail类中实行了描述,在上壹节以及开展了简约的讲述。

当你定义1个达成IJob接口的类的时候,你必要在里头实现实际供给实行的代码。Quartz.NET必要通晓有关那代码的各样消息,那样 Quartz.NET才具像你希望的那样行事。那个细节是在JobDetail类中开始展览了描述,在上一节以及举行了回顾的描述。

style=”font-size: 16px;”>初稿链接

style=”font-size: 16px;”>原稿链接

 

 

    

    

JobDetail由JobBuilder进行实例化的。JobBuilder容许开垦人士使用 fluent
interface.进行自定义JobDetail细节。

JobDetail由JobBuilder举行实例化的。JobBuilder容许开荒人士使用 fluent
interface.举办自定义JobDetail细节。

 在您使用调整者( style=”color: #ff0000; background-color: #ffffff;”>scheduler)从前,你要求对它进行实例化(哪个人能猜到那吗?)。在实例化scheduler时候,你需求运用 style=”color: #ff0000;”>ISchedulerFactory。

 在你利用调治者( style=”color: #ff0000; background-color: #ffffff;”>scheduler)以前,你须求对它进行实例化(何人能猜到那吗?)。在实例化scheduler时候,你需求运用 style=”color: #ff0000;”>ISchedulerFactory。

 

 

 

 

让我们花点时间看Job的建制以及在Quartz.NET中的生命周期。在第二节中早已观察的事例让大家再看二遍:

让大家花点时间看Job的机制以及在Quartz.NET中的生命周期。在第壹节中早就看到的例证让我们再看2次:

style=”font-size: 1陆px;”> 在您实例化好scheduler后。你能够运营、让它地处等候方式以及关闭它。请留心: style=”color: #ff0000;”>壹旦scheduler关闭后,将不可能再被重启使用。除非你在实例化新的scheduler。若是scheduler未有被运转触发器不会被运行(Triggers)(Ijob实例对象中的代码也不会被施行),触发器保持为等待景况

 

style=”font-size: 1陆px;”> 在您实例化好scheduler后。你能够运营、让它地处等候格局以及关闭它。请小心: style=”color: #ff0000;”>一旦scheduler关闭后,将不能够再被重启使用。除非你在实例化新的scheduler。如若scheduler未有被运转触发器不会被运营(Triggers)(Ijob实例对象中的代码也不会被实施),触发器保持为等候处境

 

金沙注册送58 1金沙注册送58 2

金沙注册送58 3金沙注册送58 4

 

 

 1 // define the job and tie it to our HelloJob class
 2 IJobDetail job = JobBuilder.Create<HelloJob>()
 3     .WithIdentity("myJob", "group1")
 4     .Build();
 5 
 6 // Trigger the job to run now, and then every 40 seconds
 7 ITrigger trigger = TriggerBuilder.Create()
 8   .WithIdentity("myTrigger", "group1")
 9   .StartNow()
10   .WithSimpleSchedule(x => x
11       .WithIntervalInSeconds(40)
12       .RepeatForever())
13   .Build();
14   
15 sched.ScheduleJob(job, trigger);
 1 // define the job and tie it to our HelloJob class
 2 IJobDetail job = JobBuilder.Create<HelloJob>()
 3     .WithIdentity("myJob", "group1")
 4     .Build();
 5 
 6 // Trigger the job to run now, and then every 40 seconds
 7 ITrigger trigger = TriggerBuilder.Create()
 8   .WithIdentity("myTrigger", "group1")
 9   .StartNow()
10   .WithSimpleSchedule(x => x
11       .WithIntervalInSeconds(40)
12       .RepeatForever())
13   .Build();
14   
15 sched.ScheduleJob(job, trigger);
 1     // construct a scheduler factory
 2     ISchedulerFactory schedFact = new StdSchedulerFactory();
 3     
 4     // get a scheduler
 5     IScheduler sched = schedFact.GetScheduler();
 6     sched.Start();
 7     
 8     // define the job and tie it to our HelloJob class
 9    IJobDetail job = JobBuilder.Create<HelloJob>()
10         .WithIdentity("myJob", "group1")
11         .Build();
12   
13    // Trigger the job to run now, and then every 40 seconds
14    ITrigger trigger = TriggerBuilder.Create()
15       .WithIdentity("myTrigger", "group1")
16       .StartNow()
17       .WithSimpleSchedule(x => x
18           .WithIntervalInSeconds(40)
19           .RepeatForever())
20       .Build();
21       
22   sched.ScheduleJob(job, trigger);
 1     // construct a scheduler factory
 2     ISchedulerFactory schedFact = new StdSchedulerFactory();
 3     
 4     // get a scheduler
 5     IScheduler sched = schedFact.GetScheduler();
 6     sched.Start();
 7     
 8     // define the job and tie it to our HelloJob class
 9    IJobDetail job = JobBuilder.Create<HelloJob>()
10         .WithIdentity("myJob", "group1")
11         .Build();
12   
13    // Trigger the job to run now, and then every 40 seconds
14    ITrigger trigger = TriggerBuilder.Create()
15       .WithIdentity("myTrigger", "group1")
16       .StartNow()
17       .WithSimpleSchedule(x => x
18           .WithIntervalInSeconds(40)
19           .RepeatForever())
20       .Build();
21       
22   sched.ScheduleJob(job, trigger);

View Code

View Code

style=”font-size: 16px;”>如下面代码所示,让Quartz.NET职业起来想当简单。在下一节中,我们将会给出Jobsand Triggers的快速预览,这样您就会更明亮的敞亮地点那段代码。

style=”font-size: 1陆px;”>如上边代码所示,让Quartz.NET事业起来想当简单。在下一节中,大家将会给出Jobsand Triggers的长足预览,那样你就会更明白的明亮地方那段代码。

现行反革命定义3个HelloJob 如下所示:

最近定义3个HelloJob 如下所示:

1 public class HelloJob : IJob
2 {
3     public void Execute(IJobExecutionContext context)
4     {
5         Console.WriteLine("HelloJob is executing.");
6     }
7 }
1 public class HelloJob : IJob
2 {
3     public void Execute(IJobExecutionContext context)
4     {
5         Console.WriteLine("HelloJob is executing.");
6     }
7 }

请留心,在此间给scheduler 一个IJobDetail 实例,它只必要一个job实例就能张开运转。当scheduler试行job的时候,scheduler 会在调用Execute方法从前实例化一个job实例。 能实例化job的前提是job类中须要有个无参的构造函数。还有2个索要留意的是,在job类中定义任何数据字段其实没有怎么太大的意义,因为在job的运维时期不会保留那几个数据字段。

请留意,在此间给scheduler 三个IJobDetail 实例,它只须求一个job实例就能张开运作。当scheduler试行job的时候,scheduler 会在调用Execute方法在此之前实例化1个job实例。 能实例化job的前提是job类中须要有个无参的构造函数。还有二个内需留意的是,在job类中定义任何数据字段其实未有怎么太大的意思,因为在job的周转时期不会保留那个数据字段。

 

 

观察那你恐怕会问,那作者怎么样为三个job提供属性和配备信息吗?并且这么能追踪保持job的实行情况吧?要回应这个主题材料,关键要弄懂JobDataMap,它是JobDetail中的1有的。

观看那你大概会问,那我如何为三个job提供属性和安排音信吗?并且这么能追踪保持job的履市价况吧?要应对那个标题,关键要弄懂JobDataMap,它是JobDetail中的一有的。

 

 

JobDataMap

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>JobDataMap中可用来容纳任何数据的您愿意提需要job实例在实施时(可种类化)的对象。JobDataMap落成了IDictionary接口,并为其增添了部分用来存款和储蓄和探索基本类型的数据的实用方法。

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”> 

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>下面是JobDataMap 快速上手代码,在增多job到scheduler在此之前先为JobDataMap加多一些数据 :

1 // define the job and tie it to our DumbJob class
2 IJobDetail job = JobBuilder.Create<DumbJob>()
3     .WithIdentity("myJob", "group1") // name "myJob", group "group1"
4     .UsingJobData("jobSays", "Hello World!")
5     .UsingJobData("myFloatValue", 3.141f)
6     .Build();

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>上边是从试行的job中获得JobDataMap 数据

 1 Getting Values from a JobDataMap
 2 public class DumbJob : IJob
 3 {
 4     public void Execute(JobExecutionContext context)
 5     {
 6       JobKey key = context.JobDetail.Key;
 7 
 8       JobDataMap dataMap = context.JobDetail.JobDataMap;
 9 
10       string jobSays = dataMap.GetString("jobSays");
11       float myFloatValue = dataMap.GetFloat("myFloatValue");
12 
13       Console.Error.WriteLine("Instance " + key + " of DumbJob says: " + jobSays + ", and val is: " + myFloatValue);
14     }
15 }

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>假使您准备采用三个百折不回的JobStore (JobStore 就要JobStore 部分实行斟酌)你应当关心就要JobDataMap放些什么。因为它会被种类化,所以更易于生出版本难点。在职业的本子中是安全的,除外,任哪个人都得以更改你的实体类。所以不得不关怀包容性会被毁掉的情形。

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”> 

官方网址文书档案翻译,官方文书档案翻译。 style=”font-family: ‘Microsoft YaHei’; font-size: 1陆px;”>所以你能够把AdoJobStore
and
JobDataMap 放进map中,仅包蕴着原始函数与字符串数据,因而解除了类别化的各类主题材料。

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”> 

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>由于Quartz暗中同意JobFactory会再job实例化的时候去实例那多少个带有set属性的,所以当你增添富含set访问的性质的时候会在JobDataMap中创造对应的key将其保存。那样就无须开始展览展现区提示在execute方法格局中开始展览映射。

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”> 

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>Trigger也有其相关的JobDataMap。当您须求多少个Trigger进行调治和重复scheduler 那是那些实用的。各类Trigger是独立的,并且需求你独自输入配置音信。

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”> 

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>JobDataMap 将JobExecutionContext 作为job试行时候的上下文。它当中包涵了JobDataMap 和Trigger并且覆盖前面一样的值。

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”> 

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>上面是出自JobExecutionContext获取数据的功课实践进程中集结的JobDataMap的1个简约的例子:

金沙注册送58 5金沙注册送58 6

 1 public class DumbJob : IJob
 2 {
 3     public void Execute(IJobExecutionContext context)
 4     {
 5         JobKey key = context.JobDetail.Key;
 6 
 7         JobDataMap dataMap = context.MergedJobDataMap;  // Note the difference from the previous example
 8 
 9         string jobSays = dataMap.GetString("jobSays");
10         float myFloatValue = dataMap.GetFloat("myFloatValue");
11         IList<DateTimeOffset> state = (IList<DateTimeOffset>) dataMap["myStateData"];
12         state.Add(DateTimeOffset.UtcNow);
13 
14         Console.Error.WriteLine("Instance " + key + " of DumbJob says: " + jobSays + ", and val is: " + myFloatValue);
15     }
16 }

View Code

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>如故,若是您想依附的JobFactory“注入”数据映射值到您的类,它恐怕看起来像那些:

金沙注册送58 7金沙注册送58 8

 1 public class DumbJob : IJob
 2 {
 3     public string JobSays { private get; set; }
 4     public float FloatValue { private get; set; }
 5       
 6     public void Execute(IJobExecutionContext context)
 7     {
 8         JobKey key = context.JobDetail.Key;
 9 
10         JobDataMap dataMap = context.MergedJobDataMap;  // Note the difference from the previous example
11 
12         IList<DateTimeOffset> state = (IList<DateTimeOffset>) dataMap["myStateData"];
13         state.Add(DateTimeOffset.UtcNow);
14 
15         Console.Error.WriteLine("Instance " + key + " of DumbJob says: " + JobSays + ", and val is: " + FloatValue);
16     }
17 }

View Code

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>你会注意到类的整套代码较长,但在execute()方法的代码是根本。人们还足以争论说,即使代码越长,它实质上花了更加少的编码,假设技术员的IDE用于自动生成的习性,而不必手工业编写制定单独的调用从JobDataMap中检索值。这是你的抉择。

JobDataMap

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>JobDataMap中可用于容纳任何数据的您愿意提须求job实例在实践时(可体系化)的靶子。JobDataMap完毕了IDictionary接口,并为其增多了有些用于存款和储蓄和索求基本项目标数据的实用方法。

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”> 

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>下面是JobDataMap 急忙上手代码,在增添job到scheduler从前先为JobDataMap增多一些数据 :

1 // define the job and tie it to our DumbJob class
2 IJobDetail job = JobBuilder.Create<DumbJob>()
3     .WithIdentity("myJob", "group1") // name "myJob", group "group1"
4     .UsingJobData("jobSays", "Hello World!")
5     .UsingJobData("myFloatValue", 3.141f)
6     .Build();

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>上面是从实行的job中拿走JobDataMap 数据

 1 Getting Values from a JobDataMap
 2 public class DumbJob : IJob
 3 {
 4     public void Execute(JobExecutionContext context)
 5     {
 6       JobKey key = context.JobDetail.Key;
 7 
 8       JobDataMap dataMap = context.JobDetail.JobDataMap;
 9 
10       string jobSays = dataMap.GetString("jobSays");
11       float myFloatValue = dataMap.GetFloat("myFloatValue");
12 
13       Console.Error.WriteLine("Instance " + key + " of DumbJob says: " + jobSays + ", and val is: " + myFloatValue);
14     }
15 }

style=”font-family: ‘Microsoft YaHei’; font-size: 1陆px;”>纵然您盘算选拔三个滴水穿石的JobStore (JobStore 将要JobStore 部分举行钻探)你应当关注就要JobDataMap放些什么。因为它会被体系化,所以更易于生出版本难点。在规范的本子中是安全的,除此而外,任何人都得以改造你的实体类。所以不得不关切包容性会被毁损的气象。

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”> 

金沙注册送58, style=”font-family: ‘Microsoft YaHei’; font-size: 1六px;”>所以你能够把AdoJobStore
and
JobDataMap 放进map中,仅包涵着原始函数与字符串数据,由此排除了种类化的种种难点。

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”> 

style=”font-family: ‘Microsoft YaHei’; font-size: 1陆px;”>由于Quartz私下认可JobFactory会再job实例化的时候去实例那1个带有set属性的,所以当您增加富含set访问的习性的时候会在JobDataMap中创制对应的key将其保存。这样就绝不开始展览展现区提示在execute方法格局中进行映射。

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”> 

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>Trigger也有其辅车相依的JobDataMap。当你需求多少个Trigger进行调节和重新scheduler 那是老大管用的。每一个Trigger是独自的,并且供给您独自输入配置新闻。

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”> 

style=”font-family: ‘Microsoft YaHei’; font-size: 1陆px;”>JobDataMap 将JobExecutionContext 作为job试行时候的上下文。它在那之中含有了JobDataMap 和Trigger并且覆盖前边同样的值。

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”> 

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>下边是根源JobExecutionContext获取数据的作业实行进程中集合的JobDataMap的3个简练的例证:

金沙注册送58 9金沙注册送58 10

 1 public class DumbJob : IJob
 2 {
 3     public void Execute(IJobExecutionContext context)
 4     {
 5         JobKey key = context.JobDetail.Key;
 6 
 7         JobDataMap dataMap = context.MergedJobDataMap;  // Note the difference from the previous example
 8 
 9         string jobSays = dataMap.GetString("jobSays");
10         float myFloatValue = dataMap.GetFloat("myFloatValue");
11         IList<DateTimeOffset> state = (IList<DateTimeOffset>) dataMap["myStateData"];
12         state.Add(DateTimeOffset.UtcNow);
13 
14         Console.Error.WriteLine("Instance " + key + " of DumbJob says: " + jobSays + ", and val is: " + myFloatValue);
15     }
16 }

View Code

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>也许,假使你想依附的JobFactory“注入”数据映射值到您的类,它只怕看起来像那些:

金沙注册送58 11金沙注册送58 12

 1 public class DumbJob : IJob
 2 {
 3     public string JobSays { private get; set; }
 4     public float FloatValue { private get; set; }
 5       
 6     public void Execute(IJobExecutionContext context)
 7     {
 8         JobKey key = context.JobDetail.Key;
 9 
10         JobDataMap dataMap = context.MergedJobDataMap;  // Note the difference from the previous example
11 
12         IList<DateTimeOffset> state = (IList<DateTimeOffset>) dataMap["myStateData"];
13         state.Add(DateTimeOffset.UtcNow);
14 
15         Console.Error.WriteLine("Instance " + key + " of DumbJob says: " + JobSays + ", and val is: " + FloatValue);
16     }
17 }

View Code

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>你会专注到类的全套代码较长,但在execute()方法的代码是深透。人们还是能够争辩说,就算代码越长,它事实上花了越来越少的编码,假如程序猿的IDE用于自动生成的性情,而不用手工业编写制定单独的调用从JobDataMap中检索值。那是您的选择。

Job “Instances”

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>很多用户消费时间是纳闷毕竟是怎么构成了“Job实例”。大家会竭力讲理解那里,下边关于的办事景况和并发性的部分。

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”> 

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>您能够创制3个job类,并通过创建JobDetails的四个实例的调节中贮存了无数“实例定义”
每一个都有谈得来的习性和JobDataMap –
并且她们都扩大到scheduler中

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”> 

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>譬如,你能够创造五个兑现所谓的“SalesReportJob”的IJob接口的类。这几个job可能会被编码到希望发送给它(通过JobDataMap中)来钦命发卖报告应基于出售职员的姓名参数。然后它们能够创设八个概念的job(JobDetails),如“SalesReportForJoe”和“SalesReportFor迈克”具备“乔joe”和“迈克”在相应JobDataMaps作为输入到各自的job钦命。

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”> 

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>当Trigger运行,将多少个JobDetail(实例定义),它会被电动加载,和job类是指通过对调治安顿的JobFactory实例化。暗中同意的JobFactory只是调用使用Activator.CreateInstance
调用job类的私下认可构造函数,然后尝试在同盟的JobDataMap中的键名该类调用setter属性。您大概希望创设本身的贯彻的JobFactory来实现的作业,如让您的应用程序的IoC大概DI容器爆发/早先化作业实例。

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”> 

In
“Quartz speak”,
大家指的是各种存储的JobDetail作为“job定义”或“的JobDetail实例”,大家指的是每五个实践job作为“job实例”或“job定义实例”。经常,要是大家只是用这几个词的“job”,大家指的是一个名称为定义或JobDetail等。当大家指的是类实现job接口,大家平时采取的术语“job
type”。

Job “Instances”

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>成都百货上千用户消费时间是疑惑毕竟是什么样构成了“Job实例”。大家会极力讲精通那里,上面关于的劳作景况和并发性的片段。

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”> 

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>你能够创立贰个job类,并经过创建JobDetails的八个实例的调节中存款和储蓄了累累“实例定义”
每叁个都有自身的特性和JobDataMap –
同时他们都增多到scheduler中

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”> 

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>例如,你可以创立2个兑现所谓的“SalesReportJob”的IJob接口的类。那个job大概会被编码到梦想发送给它(通过JobDataMap中)来钦点发售报告应依赖发售人士的全名参数。然后它们得以成立几个概念的job(JobDetails),如“SalesReportForJoe”和“SalesReportFor迈克”具备“乔joe”和“迈克”在对应JobDataMaps作为输入到各自的job钦定。

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”> 

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>当Trigger运行,将1个JobDetail(实例定义),它会被电动加载,和job类是指通过对调整安排的JobFactory实例化。默认的JobFactory只是调用使用Activator.CreateInstance
调用job类的暗中认可构造函数,然后尝试在合营的JobDataMap中的键名该类调用setter属性。您也许希望创设协和的贯彻的JobFactory来成功的政工,如让您的应用程序的IoC也许DI容器发生/初阶化作业实例。

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”> 

In
“Quartz speak”,
我们指的是各类存款和储蓄的JobDetail作为“job定义”或“的JobDetail实例”,大家指的是每一个执行job作为“job实例”或“job定义实例”。平日,如若大家只是用那么些词的“job”,大家指的是叁个名称叫定义或JobDetail等。当大家指的是类落成job接口,大家一直使用的术语“job
type”。

Job State and Concurrency

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>目前有部分有关Job的动静数据(aka
JobDataMap)和并发性附加表达。能够天剑组合天性到您的job类上,来影响Quartz’的行为。

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”> 

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>DisallowConcurrentExecution增添到Job类,告诉Quartz不推行给定的job定义的四个实例(便是指给定的job类)并发的性质。注意那之中的所说,必须小心使用。在上①节的事例中,假设“SalesReportJob”有那几个性情,比唯有1个“SalesReportForJoe”的实例能够在加以时间实践的,但它能够与“SalesReportForMike”的八个实例,同时试行。约束是依赖2个实例定义(JobDetail等),而不是在工作类的实例。不过,它(quartz的统一计划),决定对类本人指点的属性,因为它调控对类实行什么样进行编写翻译。

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”> 

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>PersistJobDataAfterExecution是足以被增添到Job类,告诉quartz更新JobDetail的JobDataMap存款和储蓄的别本属性在execute()方法成功做到后(未抛出万分),使得同一的job在下一遍施行(JobDetail)接收,而不是原来存储的值的立异的值。像DisallowConcurrentExecution属性,那适用于作业定义实例,而不是叁个作业类的实例,纵然当时间调整制让job类指引的个性,因为它往往使对类是怎样编码的出入(如’有状态’将要求显式地“通晓”的实行措施中的代码)。

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”> 

lang=”EN-US”>若是运用PersistJobDataAfterExecution属性,你应有认真挂念也选取DisallowConcurrentExecution属性,以幸免留下怎么样数据时,同样的job(JobDetail)的多个实例并发实践存款和储蓄大概的歪曲(竞争原则)

Job State and Concurrency

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>近期有部分有关Job的图景数据(aka
JobDataMap)和并发性附加表明。能够天剑组合天性到您的job类上,来震慑Quartz’的表现。

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”> 

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>DisallowConcurrentExecution增添到Job类,告诉Quartz不实践给定的job定义的多个实例(就是指给定的job类)并发的性情。注意那中间的所说,必须小心使用。在上一节的例证中,若是“SalesReportJob”有其一性格,比唯有2个“SalesReportForJoe”的实例能够在加以时间试行的,但它能够与“SalesReportFor迈克”的3个实例,同时试行。约束是根据一个实例定义(JobDetail等),而不是在专业类的实例。可是,它(quartz的统一策动),决定对类自己指导的天性,因为它决定对类进行怎么样进行编写翻译。

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”> 

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>PersistJobDataAfterExecution是能够被增多到Job类,告诉quartz更新JobDetail的JobDataMap存款和储蓄的别本属性在execute()方法成功完成后(未抛出非常),使得同样的job在下三回实施(JobDetail)接收,而不是原本存款和储蓄的值的换代的值。像DisallowConcurrentExecution属性,那适用于作业定义实例,而不是三个作业类的实例,即便当时间调节制让job类引导的性质,因为它往往使对类是怎么编码的差异(如’有气象’将供给显式地“精晓”的实行格局中的代码)。

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”> 

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>1旦使用PersistJobDataAfterExecution属性,你应该认真考虑也应用DisallowConcurrentExecution属性,以制止留下怎么样数据时,一样的job(JobDetail)的多个实例并发施行存款和储蓄恐怕的混淆(竞争条件)

Other Attributes Of Jobs

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>上面是可用于通过JobDetail等对象的job实例来定义的别样品质的简易计算:

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”> 

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>持久性


假诺job是不行持久的,它会活动从调治中除去,壹旦不再有与之城门失火的别样活动的触发器。换句话说,非持久job具有三个寿命由其触发的存在的限制。

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>可复苏性


假设作业“需求苏醒”,它是在调节的“硬关闭”的小时施行(即它崩溃中运营的长河中,或在机械关闭),然后再次施行业调治程序重新初叶。在那种情景下,JobExecutionContext.Recovering属性将回来真。

Other Attributes Of Jobs

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>上面是可用于经过JobDetail等目标的job实例来定义的别的属性的简要总计:

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”> 

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>持久性


壹经job是不可持久的,它会自动从调整中剔除,壹旦不再有与之有关的其他活动的触发器。换句话说,非持久job具有叁个寿命由其触发的留存的范围。

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>可苏醒性


假定作业“须求恢复生机”,它是在调解的“硬关闭”的小时实施(即它崩溃中运作的进度中,或在机器关闭),然后再一次试行业调治程序重新起始。在那种状态下,JobExecutionContext.Recovering属性将再次来到真。

JobExecutionException

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>最终,大家须求告诉你的IJob.Execute(..)方法的局地细节。你应当从实践措施抛出的唯1项目是JobExecutionException。正因为如此,你经常应该换execute方法的全体内容以’的try-catch“块。你也应有花一些岁月看的JobExecutionException的文书档案,你的做事得以用它来提供调整各类指令为你想怎么相当进行管理。

JobExecutionException

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>最后,大家需求告诉你的IJob.Execute(..)方法的某些细节。你应有从实行办法抛出的唯一项目是JobExecutionException。正因为这么,你习感觉常应该换execute方法的全部内容以’的try-catch“块。你也相应花一些时日看的JobExecutionException的文书档案,你的办事得以用它来提供调解各样指令为你想怎么格外进行管理。

相关文章

网站地图xml地图