将参数传递给hybris上的cron作业

时间:2018-04-06 12:40:42

标签: cron hybris

public class UserRetrievePerformable extends AbstractJobPerformable<UserRetrieveJobModel>
{
    private static final Logger LOG = Logger.getLogger(UserRetrievePerformable.class);

    @Autowired
    TotalCustomerFacade totalCustomerFacade;



    @Override
    public PerformResult perform(UserRetrieveJobModel userRetrieveJobModel) {
        LOG.info("**********************************");
        LOG.info("Greeting from MyJobPerformable!!!");
        LOG.info("**********************************");

        return new PerformResult(CronJobResult.SUCCESS, CronJobStatus.FINISHED);
    }

我想让这个工作把参数作为字符串。

我该怎么做?根据春季文档,它无法完成。但必须有另一种方式吗?

当我从后台或某处给出字符串时,job会给输出字符串吗?

2 个答案:

答案 0 :(得分:1)

您必须创建一个新类型,该类型使用新的字符串属性扩展CronJobModel,该属性稍后保存参数值。 然后,您可以在运行作业之前从后台更改参数值。

您可以按照此分步教程获取更多信息: https://www.stackextend.com/hybris/everything-about-cronjobs-in-hybris-part-2/

答案 1 :(得分:0)

我想你可能会混淆Job和CronJob。工作是应该完成的任务。 CronJob是该任务的单个执行。因此,如果要执行Job,则必须创建CronJob的实例。您可以通过选择正确的Job实例来定义CronJob应执行的任务。启动此CronJob时,将使用CronJob作为参数调用相应的AbstractJobPerformable类的perform方法。

那么如何为执行创建参数?创建CronJob类型的子类型,并将所有需要的参数添加为属性。然后,当您创建CronJob时,相应地设置所有属性。在perform方法中,您可以访问该CronJob实例的属性。

您可以像这样创建CronJob:

HelloWorldCronJobModel cronJob = modelService.create(HelloWorldCronJobModel.class);
JobModel myJob = cronJobService.getJob("myJob");
cronJob.setJob(myJob);
// Add own attribute to Job
cronJob.setGreetedPerson("John Doe");
modelService.save(cronJob);
cronJobService.performCronJob(cronJob);

调用perform方法时,请访问属性:

@Override
public PerformResult perform(MyCronJobModel myCronJob) {
    LOG.info("Hello " + myCronJob.getGreetedPerson());

    return new PerformResult(CronJobResult.SUCCESS, CronJobStatus.FINISHED);
}