Hybris - >如何使用execute beanshell脚本创建cronjob?

时间:2016-10-25 11:29:03

标签: groovy beanshell hybris

我有一个beanshell脚本,我希望它能自动化。 我需要创建cronjob并将我的beanshell代码添加到它。 也许有人这样想? 有谁知道怎么做? 或者如何将我的脚本与cronjob匹配?

4 个答案:

答案 0 :(得分:2)

答案实际上是在Cronjob scripting文档中给出的。

简而言之,您将使用动态脚本来创建cronjob而不是使用缓慢的老式方式。

概念

使用了三个新对象(引自doc):

  
      
  • 脚本 - 存储脚本内容的项目类型(单独的部署表)
  •   
  • ScriptingJob - 一个新的ServicelayerJob项,其中还包含了scriptURI(因此,存储的脚本可以是   在运行时从不同位置(classpath,db等)发现。
  •   
  • ScriptingJobPerformable - 分配给每个ScriptingJob实例的spring bean;它实现了通常的perform()方法(比如   对于任何其他cronjob)。这就是"脚本化的地方" cronjob逻辑是   执行
  •   

如何使用Cronjob脚本

第一步 - 将您的脚本实例保存在数据库中。对于此示例,我使用了http://www.beanshell.org/manual/quickstart.html

中的代码
  

注意:您可以使用Groovy,BeanShell广告JavaScript

创建脚本
INSERT_UPDATE Script; code[unique=true];content;scriptType(code)
;myBshScript;"foo = ""Foo"";    
four = (2 + 2)*2/2;
print( foo + "" = "" + four );  // print() is a BeanShell command

// Do a loop
for (i=0; i<5; i++)
    print(i);   

// Pop up a frame with a button in it
button = new JButton( ""My Button"" );
frame = new JFrame( ""My Frame"" );
frame.getContentPane().add( button, ""Center"" );
frame.pack();
frame.setVisible(true);";BEANSHELL
  

请勿忘记在脚本中使用其他"(Impex限制)转义"

第二步 - 创建一个使用以前创建的脚本的ScriptingJob

INSERT_UPDATE ScriptingJob; code[unique=true];scriptURI
;myBshDynamicJob;model://myBshScript
  

model://myBshScript用于检索存储在数据库中的脚本

第三步 - 创建CronJob

INSERT_UPDATE CronJob; code[unique=true];job(code);singleExecutable;sessionLanguage(isocode)
;myBshDynamicCronJob;myBshDynamicJob;true;en

可选步骤 - 为CronJob创建触发器

INSERT_UPDATE Trigger;cronjob(code)[unique=true];cronExpression
;myBshDynamicCronJob;0 0 0/1 1/1 * ? *
  

每小时执行一次cronjob。

通过脚本执行CronJob

在hac脚本编制选项卡中,选择Groovy并在提交模式下运行它。

def dynamicCJ = cronJobService.getCronJob("myBshDynamicCronJob")
cronJobService.performCronJob(dynamicCJ,true)

运行脚本后,您应该显示

enter image description here

在控制台中

INFO  [hybrisHTTP27] (myBshDynamicCronJob) [ScriptingJobPerformable] Foo = 4
0
1
2
3
4

答案 1 :(得分:0)

在Hybris中,转到HMC&gt;系统&gt; CronJobs&GT;搜索您创建的cronjob或创建一个新的cronjob&gt;时间表标签&gt;触发&GT;创建触发器。

在此“触发器”选项卡窗口中,您可以安排间隔,例如。每日,每周等。您也可以设置开始时间和频率。

您也可以通过impex执行此触发设置,如下所示:

INSERT_UPDATE Trigger;cronJob(code)[unique=true];second;minute;hour;day;month;year;relative;active;maxAcceptableDelay
;CartRemovalJob;0;5;4;-1;-1;-1;false;true;-1

有关更多详细信息,请查看this,以防您访问Hybris Wiki。

答案 2 :(得分:0)

如果您可以访问hybris wiki,here,您可以找到如何创建和执行cronjob。

为了执行bean shell,在cronjob&#34;执行&#34;方法你应该这样做:

SimpleScriptContent content = new SimpleScriptContent("beanshell", "here your beanshell script code as string");
ScriptExecutable script = scriptingLanguagesService.getExecutableByContent(content);
ScriptExecutionResult result = script.execute();
...

这里是导入部分:

import de.hybris.platform.scripting.engine.content.impl.SimpleScriptContent;
import de.hybris.platform.scripting.engine.ScriptExecutionResult;
import de.hybris.platform.scripting.engine.ScriptExecutable;

您应该使用注释访问scriptingLanguagesService:

@Autowired
ScriptingLanguagesService scriptingLanguagesService;

答案 3 :(得分:0)

我已经尝试了以下针对groovy脚本的步骤。您可以为beanshell尝试相同的操作。


您必须创建一个实例

脚本-脚本内容要存储的项目类型。

ScriptingJob -一个新的ServicelayerJob项,其中还包含scriptURI

CronJob -这是执行“脚本化” cronjob逻辑的地方


1。创建脚本

脚本代码: HelloScript
脚本引擎类型: beanshell
内容: log.info("Hello");

2。创建脚本作业

再次从HMC / Backoffice查找ScriptinJobs并创建它的新实例。在这里,您必须像这样定义CodeScriptURI

代码: HelloScriptJob
ScriptURI: model://HelloScript

您可以在下一步中访问此作业以创建CronJob

3。创建一个CronJob

在HMC / BackOffice中,创建cronJob的实例。在
中选择上面创建的作业(HelloScriptJob) Job definition下拉菜单并保存更改。现在您可以计划/运行此cronJob。


请参阅详细的帖子cronjob-using-groovy-script-hybris