【发布时间】:2015-12-04 11:39:24
【问题描述】:
我正在使用下面的代码安排作业。
@Controller
@RequestMapping("VIEW")
public class MyController {
@RenderMapping
public String defaultView() {
try {
String cronText = "0 30 12 1/1 * ? *";
String description = "Message Scheduler Description";
String destinationName = DestinationNames.SCHEDULER_DISPATCH;
int exceptionsMaxSize = 0;
String portletId = "portletId";
Message message = new Message();
message.put(SchedulerEngine.MESSAGE_LISTENER_CLASS_NAME,SchedulerListener.class.getName());
message.put(SchedulerEngine.PORTLET_ID, portletId);
Trigger trigger = new CronTrigger(SchedulerListener.class.getName(), SchedulerListener.class.getName(), cronText);
SchedulerEngineHelperUtil.schedule(trigger,StorageType.PERSISTED, description, destinationName, message, exceptionsMaxSize);
}catch (SchedulerException e) {
e.printStackTrace();
}
return "view";
}
}
上述代码的问题是调度程序仅在服务器会话之前有效。执行此方法后,即使在服务器重新启动后,我也想在上述时间触发 schedulerjob。有没有办法在 liferay 中实现这一点?
【问题讨论】:
-
当您使用 StorageType.PERSISTED 时,我猜,该作业已保存在您的数据库中。您能否检查一下您的
QUARTZ_...表是否存在并包含该作业? -
@TobiasLiefke 是的.. 重新启动服务器后,石英表仍然包含该作业。但仍然没有触发工作
-
Liferay 论坛上的这个答案建议创建一个自定义目的地。你能试一下吗? liferay.com/community/forums/-/message_boards/message/…
-
@TomasPinos 在这种情况下,我不知道在哪里可以找到
init() method以便将自定义目标添加到 MessageBusUtil -
他们的意思是
com.liferay.util.bridges.mvc.MVCPortlet#init。这就是 Liferay MVC 框架。在您的情况下,它可以是任何“init”方法。就像使用javax.annotation.PostConstruct注释的方法,甚至是控制器的渲染方法。
标签: java liferay scheduling