Java Hybris中Cron作业和Job的区别

Java Hybris中Cron作业和Job的区别,java,spring,cron,jobs,hybris,Java,Spring,Cron,Jobs,Hybris,Cron作业和hybris中的作业有什么区别 <!-- Cron Job --> <itemtype code="DemoCronJob" extends="CronJob" autocreate="true" generate="true"> <!-- Job --> <itemtype code="DemoCronJob" extends="Job" autocreate="true" generate="true"&g

Cron作业和hybris中的作业有什么区别

<!-- Cron Job -->
<itemtype code="DemoCronJob" extends="CronJob"
      autocreate="true" generate="true">

<!-- Job -->
<itemtype code="DemoCronJob"  extends="Job" 
      autocreate="true" generate="true">


创建/实现两者之间的区别是什么???

下图描述了
作业/Cronjobs
在Hybris中如何工作的完整视图,我们将以此为起点来解释
作业
Cronjob
之间的区别

由于
汽车
需要
发动机
工作,因此
Cronjob
也需要
作业
。正如没有发动机的汽车不再是汽车一样,没有发动机的
Cronjob
也不算什么

Job
是这个等式中有意识的元素,它定义了
Cronjob
要执行的逻辑。 同时,
Cronjob
作业
用户
之间的中间环节,用户可以通过
Cronjob
作业发送信息(优先级、触发器、节点等)和命令(启动、停止、中止等)以正常工作,
作业
可以显示消息(数据、状态、结果、日志等)也通过
Cronjob
发送给用户

我相信最有效的学习方法是通过例子,所以让我们做一个:

最重要的
Hybris
世界需求之一是创建一个
Cronjob
,导出所选
catalogVersion
的所有
产品

  • 首先,让我们创建Cronjob,在
    Cronjob
    中,我们将定义发送到
    作业的输入
  • 
    

  • 最后将作业ExporterJob附加到CronjobExporterCronJob并运行Cronjob:)
  • 通过impex



    编辑:

    cronjob是处理配置、触发器、日志和执行结果的容器,没有逻辑

    作业也不包含任何逻辑,它只引用
    springId
    。如果它是一个
    ServicelayerJob
    ,那么它引用一个springbean定义

    Springbean包含逻辑。这个bean应该扩展
    abstractJobPerformable
    ,这样您就不会定义新项。您继续使用
    Servicelayerjob
    类型,所有扩展
    abstractJobPerformable
    的bean都可以在任何cronjob中使用

    在您的示例中,从items.xml中删除下一行

    <itemtype code="DemoCronJob"  extends="Job" 
      autocreate="true" generate="true">` 
    

    JUNIT租户中的BUG

    上述impex在junit租户中不起作用(在hybris 6.2中测试)。在impex中,有一部分引用作业:
    job(code)
    。因此,它希望在那里设置一个JobModel实例

    在主租户中,一个过滤器或类似的东西会获取impex中引用的bean,并自动创建一个JobModel实例(实际上是ServicelayerjobModel),该实例的名称为bean,名称为springId(两者相同)

    不幸的是,在junit中,这个过滤器在默认情况下似乎没有被激活(我还不知道如何激活它)。因此,mandator需要自己创建JobModel的实例

    INSERT_UPDATE ServicelayerJob;code[unique=true];springId
    ;demoJobPerformable;demoJobPerformable
    

    注意

    hybris中仍然有使用“遗留”系统的代码。但我认为现在为每项工作创建一个新项目并不是一个好的做法

    $productCatalog= ...
    $Version= ...
    
    INSERT_UPDATE ExporterCronJob; code[unique=true]  ;job(code) ;catalogVersion(catalog(id),version)   ;sessionLanguage(isocode)   ;sessionUser(uid)
    ;exporterCronJob ;ExporterJob ;$productCatalog:$Version  ;en  ;admin
    
    <itemtype code="DemoCronJob"  extends="Job" 
      autocreate="true" generate="true">` 
    
    <bean id="demoJobPerformable" class="com.foo.bar.DemoJobPerformable" parent="abstractJobPerformable"/>
    
    INSERT_UPDATE DemoCronJob;code[unique=true];job(code);sessionLanguage(isocode)
    ;DemoCronJobNameYouWant;demoJobPerformable;en
    
    INSERT_UPDATE ServicelayerJob;code[unique=true];springId
    ;demoJobPerformable;demoJobPerformable