use*_*818 2 java cron jobs spring hybris
hybris中Cron Job和Job有什么区别?
<!-- Cron Job -->
<itemtype code="DemoCronJob" extends="CronJob"
autocreate="true" generate="true">
<!-- Job -->
<itemtype code="DemoCronJob" extends="Job"
autocreate="true" generate="true">
Run Code Online (Sandbox Code Playgroud)
创建/实现两者有什么区别?
下图描述的是如何完整的视图Jobs/Cronjobs在工程款Hybris,我们将以此为出发点来解释之间的差异Job和Cronjob.
随着Car需要的Engine工作,也Cronjob需要Job.除了没有发动机的汽车不再是汽车了,Cronjob没有Job什么都没有.
的Job是有意识的元件在这个等式它定义了逻辑由被执行Cronjob.同时,Cronjob为之间的中间Job和Users,通过 Cronjob用户可以发送信息(优先级,触发,节点,...)和订单(启动,停止,中止,...)的Job正常工作和Job可以显示的信息(数据,状态,结果,日志,...)通过Cronjob也给用户.
我认为最有效的学习方法是通过实例,所以让我们做一个:
最Hybris世界的要求之一是创建一个Cronjob导出所有products选定的catalogVersion.
Cronjob我们将定义我们将发送给它的输入Job.<itemtype code="ExporterCronJob" extends="Cronjob" autocreate="true" generate="true" >
<attributes>
<!-- The input is the catalogVersion -->
<attribute qualifier="catalogVersion" type="CatalogVersion" >
<persistence type="property" />
</attribute>
</attributes>
</itemtype>
Run Code Online (Sandbox Code Playgroud)
Job并不总是那么明显,因为你必须处理Jalos并且我讨厌Jalos:p幸运的是,Hybris拥有另一种Job不使用的创作方式Jalos,我们稍后会介绍.
创建一个传统的方式Job是一个在问题提出的,这是建立一个item从延伸JobModel,并在相应Jalo的创建的item实施方法performCronJob(CronJob cronJob),使这个方法里面所有的逻辑.
我以前从未使用过这种方法,所以推荐的方法是使用ServicelayerJobModel,ServicelayerJobModel已经为你扩展JobModel和实现performCronJob(CronJob cronJob)了.
怎么样ServicelayerJobModel?它指的是一个JobPerformablevia SpringID,然后执行中定义的逻辑JobPerformable.
因此,我们创建JobPerformable所需要做的就是扩展AbstractJobPerformable并实现perform(CronJobModel CronJob):
public class ExporterJob extends AbstractJobPerformable<ExporterCronJobModel> {
@Override
public PerformResult perform(ExporterCronJobModel exporterCronJob) {
try {
//get inputs from the Cronjob...
CatalogVersionModel catalogVersion = exporterCronJob.getCalaogVersion();
//do logic...
exportProducts(catalogVersion);
//end of logic...
//return Success (output)...
return new PerformResult(CronJobResult.SUCCESS, CronJobStatus.FINISHED);
} catch(Exception e) {
//return Failure (output)...
return new PerformResult(CronJobResult.FAILURE, CronJobStatus.ABORTED);
}
}
}
Run Code Online (Sandbox Code Playgroud)
JobPerformable为Spring bean:<bean id="ExporterJob" class="com.foo.bar.ExporterJob" parent="abstractJobPerformable" />
Run Code Online (Sandbox Code Playgroud)
JobPerformable应重视的一个实例ServicelayerJob:通过impex:
INSERT_UPDATE ServicelayerJob ;code[unique=true] ;springId
;ExporterJob ;ExporterJob
Run Code Online (Sandbox Code Playgroud)
或者通过HMC:
通过impex:
$productCatalog= ...
$Version= ...
INSERT_UPDATE ExporterCronJob; code[unique=true] ;job(code) ;catalogVersion(catalog(id),version) ;sessionLanguage(isocode) ;sessionUser(uid)
;exporterCronJob ;ExporterJob ;$productCatalog:$Version ;en ;admin
Run Code Online (Sandbox Code Playgroud)
编辑:http://www.stackextend.com/hybris/everything-about-cronjobs-in-hybris-part-1/