官网文书档案翻译,官方文档翻译

By admin in 4858.com on 2019年4月6日

      

      

当学完第2课之后,你欢欢快喜的觉察,让jobs工作起来是照旧一定不难的。尽管让jobs运营起来很粗大略,对于其实践的根本内容依然供给了然的。它们是IJob接口中的Execute和JobDetails。

当学完第三课之后,你心旷神怡的觉察,让jobs工作起来是照旧一定简单的。即使让jobs运维起来相当粗略,对于其履行的显要内容照旧供给知道的。它们是IJob接口中的Execute和JobDetails。

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

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

官网文书档案翻译,官方文档翻译。 

 

       

       

当你定义贰个落到实处IJob接口的类的时候,你供给在其间达成实际供给实施的代码。Quartz.NET须要明白有关那代码的各个消息,这样 Quartz.NET才能像你指望的那样行事。那一个细节是在JobDetail类中开始展览了描述,在上1节以及举行了简便易行的叙述。

当你定义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中的生命周期。在率先节中早就看到的例证让大家再看3次:

让大家花点时间看Job的编写制定以及在Quartz.NET中的生命周期。在首先节中早就见到的例子让我们再看二遍:

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实例对象中的代码也不会被实践),触发器保持为等候状态

 

4858.com 14858.com 2

4858.com 34858.com 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: 16px;”>如上面代码所示,让Quartz.NET工作起来想当简单。在下1节中,我们将会给出Jobsand Triggers的全速预览,那样您就会更清楚的掌握地点那段代码。

近期定义八个HelloJob 如下所示:

如今定义二个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 实例,它只须求2个job实例就能举办运营。当scheduler执行job的时候,scheduler 会在调用Execute方法在此之前实例化3个job实例。 能实例化job的前提是job类中必要有个无参的构造函数。还有贰个索要专注的是,在job类中定义任何数据字段其实远非什么样太大的含义,因为在job的运维时期不会保留那一个多少字段。

请小心,在此处给scheduler 一个IJobDetail 实例,它只须求二个job实例就能展开运维。当scheduler执行job的时候,scheduler 会在调用Execute方法以前实例化1个job实例。 能实例化job的前提是job类中须求有个无参的构造函数。还有2个急需留意的是,在job类中定义任何数据字段其实并未有什么太大的含义,因为在job的周转期间不会保留那几个数量字段。

 

 

看看这你可能会问,那自身什么为三个job提供属性和布局消息呢?并且这么能跟踪保持job的实施意况呢?要回答那一个题材,关键要弄懂JobDataMap,它是JobDetail中的1有个别。

看来那你大概会问,那小编何以为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: 1陆px;”>借使你准备利用贰个持久的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: 1陆px;”>由于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: 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的叁个简单易行的事例:

4858.com 54858.com 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“注入”数据映射值到你的类,它恐怕看起来像这么些:

4858.com 74858.com 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中检索值。那是您的挑3拣肆。

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;”> 

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>所以你能够把AdoJobStore
and
JobDataMap 放进map中,仅包蕴着原始函数与字符串数据,因此解除了系列化的各类题材。

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

style=”font-family: ‘Microsoft YaHei’; font-size: 1陆px;”>由于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: 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的二个简单易行的例子:

4858.com 94858.com 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“注入”数据映射值到您的类,它大概看起来像那一个:

4858.com 114858.com 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;”>你能够创制一个job类,并经过创设JobDetails的三个实例的调度中存款和储蓄了累累“实例定义”
每3个都有友好的品质和JobDataMap –
并且她们都增多到scheduler中

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

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>譬如,你能够创设3个兑现所谓的“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实例”,大家指的是每1个执行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 –4858.com,
再正是她们都扩大到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”和“Mike”在对应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实例”,我们指的是每3个推行job作为“job实例”或“job定义实例”。平日,假如我们只是用这么些词的“job”,大家指的是一个名称为定义或JobDetail等。当大家指的是类达成job接口,大家一直采用的术语“job
type”。

Job State and Concurrency

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>现行反革命有1些关于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”有其一天性,比唯有三个“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;”>比方应用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迈克”的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)的八个实例并发执行存款和储蓄大概的歪曲(竞争原则)

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是不足持久的,它会自行从调度中删去,1旦不再有与之相关的其余活动的触发器。换句话说,非持久job具有3个寿命由其触发的存在的限量。

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;”>持久性


万1job是不可持久的,它会活动从调度中剔除,壹旦不再有与之城门失火的任何活动的触发器。换句话说,非持久job具有一个寿命由其触发的存在的范围。

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


假设作业“必要苏醒”,它是在调度的“硬关闭”的时光执行(即它崩溃中运维的进度中,或在机械关闭),然后再度履行当调度程序重新起初。在那种景况下,JobExecutionContext.Recovering属性将回到真。

JobExecutionException

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>终极,大家须求报告您的IJob.Execute(..)方法的某些细节。你应该从进行办法抛出的绝无仅有项目是JobExecutionException。正因为这么,你平日应该换execute方法的全部内容以’的try-catch“块。你也应有花1些时间看的JobExecutionException的文书档案,你的劳作能够用它来提供调度各样吩咐为您想怎么至极实行处理。

JobExecutionException

style=”font-family: ‘Microsoft YaHei’; font-size: 16px;”>最后,大家需求告诉你的IJob.Execute(..)方法的一些细节。你应当从履行格局抛出的唯一项目是JobExecutionException。正因为那样,你平凡应该换execute方法的全体内容以’的try-catch“块。你也相应花一些时光看的JobExecutionException的文书档案,你的工作能够用它来提供调度各个指令为您想怎么极度举办处理。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有