[英]How to create a background job in AEM as a Cloud?
我想創建一個由 AEM 執行的日常后台作業。 我閱讀了一個aem文檔和apache sling官方網站,我認為我需要兩個類。
所以我嘗試了這些代碼,但我的工作沒有執行。
服務 class
import org.apache.sling.event.jobs.JobManager;
import org.apache.sling.event.jobs.JobBuilder.ScheduleBuilder;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Component
public class MyJobService {
private static final Logger logger = LoggerFactory.getLogger(MyJobService.class);
@Reference
private JobManager jobManager;
public static final String JOB_TOPIC = "my/sample/jobtopic";
public void startScheduledJob() {
ScheduleBuilder scheduleBuilder = jobManager.createJob(JOB_TOPIC).schedule();
scheduleBuilder.hourly(9, 0); // execute daily at AM9:00
if (scheduleBuilder.add() == null) {
logger.error("myjobservice error");
}
}
}
工作消費者 class
import org.apache.sling.event.jobs.Job;
import org.apache.sling.event.jobs.consumer.JobConsumer;
import org.osgi.service.component.annotations.Component;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Component(
immediate = true,
service = JobConsumer.class,
property = {
JobConsumer.PROPERTY_TOPICS + "=my/sample/jobtopic"
}
)
public class MyJobConsumer implements JobConsumer {
private static final Logger logger = LoggerFactory.getLogger(MyJobConsumer.class);
@Override
public JobResult process(Job job) {
String topic = job.getTopic();
logger.info("this message is from myjobconsumer. topic is " + topic);
return JobResult.OK;
}
}
我是否需要另一個 class 或一些配置? 我的代碼有問題嗎?
如果您使用 @Activate 注釋方法,它將在組件啟動時調用。
@Activate public void startScheduledJob()
我猜你希望你的工作在啟動時運行。 另一種選擇是讓 MyJobService 成為一個 servlet 並從外部調用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.