Java Hybris中Cron作业和Job的区别
Cron作业和hybris中的作业有什么区别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 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