Hybris中Cron工作与工作的区别

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)

创建/实现两者有什么区别?

Mou*_*kir 6

下图描述的是如何完整的视图Jobs/Cronjobs在工程款Hybris,我们将以此为出发点来解释之间的差异JobCronjob.

在此输入图像描述

随着Car需要的Engine工作,也Cronjob需要Job.除了没有发动机的汽车不再是汽车了,Cronjob没有Job什么都没有.

Job是有意识的元件在这个等式它定义了逻辑由被执行Cronjob.同时,Cronjob为之间的中间JobUsers,通过 Cronjob用户可以发送信息(优先级,触发,节点,...)和订单(启动,停止,中止,...)的Job正常工作和Job可以显示的信息(数据,状态,结果,日志,...)通过Cronjob也给用户.

我认为最有效的学习方法是通过实例,所以让我们做一个:

Hybris世界的要求之一是创建一个Cronjob导出所有products选定的catalogVersion.

  1. 首先,让我们创建Cronjob,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)
  1. 接下来是让Job保持导出的逻辑,但是创建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)
  1. 我们需要将我们注册JobPerformable为Spring bean:
<bean id="ExporterJob" class="com.foo.bar.ExporterJob" parent="abstractJobPerformable" />
Run Code Online (Sandbox Code Playgroud)
  1. JobPerformable应重视的一个实例ServicelayerJob:

通过impex:

INSERT_UPDATE ServicelayerJob  ;code[unique=true]  ;springId
;ExporterJob  ;ExporterJob
Run Code Online (Sandbox Code Playgroud)

或者通过HMC:

在此输入图像描述

  1. 最后将Job ExporterJob附加到Cronjob ExporterCronJob并运行您的Cronjob :)

通过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/