我正在使用Liferay 6.2 CE GA4。我一直在尝试安排在我的portlet的控制器中执行一个方法。
我遇到了许多教程,其中大多数教程都提供了我们可以在liferay-portlet.xml中提供时间的案例,例如this tutorial。但是我希望用户在门户中配置时间。那么是否有可能在我的constroller中获得时间并实现一个简单的调度工作。
编辑:我有一个类似于控制器的控制器来执行调度工作。
public class MyController {
@RenderMapping
public String defaultView() {
String cron = "0 0/1 * 1/1 * ? *";
Date dt = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(dt);
calendar.add(Calendar.MINUTE, 2);
Trigger trigger = null;
try {
trigger = TriggerFactoryUtil.buildTrigger(TriggerType.CRON, Scheduler.class.getName(), Scheduler.class.getName(), calendar.getTime(), calendar.getTime(), cron);
} catch (SchedulerException e) {
e.printStackTrace();
}
Portlet portlet = PortletLocalServiceUtil.getPortletById("portlet_id");
Message message = new Message();
message.put("CONTEXT_PATH", portlet.getContextPath());
message.put(SchedulerEngine.MESSAGE_LISTENER_CLASS_NAME, Scheduler.class.getName());
message.put(SchedulerEngine.PORTLET_ID, portlet.getPortletId());
Scheduler scheduler = new Scheduler();
MessageBusUtil.registerMessageListener(DestinationNames.SCHEDULER_DISPATCH, scheduler);
try {
SchedulerEngineHelperUtil.schedule( trigger, StorageType.PERSISTED, "", DestinationNames.SCHEDULER_DISPATCH, message, 5);
} catch (SchedulerException e) {
e.printStackTrace();
}
return "view";
}
}
上面的Scheduler
类定义如下。
public class Scheduler implements MessageListener {
@Override
public void receive(Message message) throws MessageListenerException {
myMethodAtScheduledTime();
}
public void myMethodAtScheduledTime() {
System.out.println("Invoked at " + new Date());
}
}
每10或20秒调用一次方法myMethodAtScheduledTime
。如何将呼叫限制为一次。即恰好在日历实例时间+ 2分钟(calendar.add(Calendar.MINUTE, 2);
)
答案 0 :(得分:2)
可以动态创建调度程序。
MessageListener
- 只有一个double R = 200;
double R2 = 1000;
oTheta += 0.1; // depending on your framerate, the more you add, the faster it will orbit
for (double t = 0; t < 2 * Math.PI; t += 0.01) {
x = R * Math.cos(t) + 0 + R2 * Math.cos(oTheta);
y = R * Math.sin(t) + 0 + R2 * Math.sin(oTheta);
revalidate();
repaint();
}
方法的界面。SchedulerEngineHelperUtil#schedule
方法注册可配置的触发器。触发器将消息侦听器类和调用时间作为参数(等等)。请参阅Creating the scheduler dynamically in liferay博文或this forum post以查找一些示例。