ฉันใช้ Liferay 6.2 CE GA4 ฉันพยายามกำหนดเวลาการดำเนินการของเมธอดในคอนโทรลเลอร์ของพอร์ตเล็ตของฉัน
ฉันเจอบทช่วยสอนมากมายซึ่งบทช่วยสอนส่วนใหญ่จะให้กรณีที่เราสามารถระบุเวลาใน liferay-portlet.xml เช่น บทช่วยสอนนี้ แต่ฉันต้องการให้ผู้ใช้กำหนดค่าเวลาในพอร์ทัล เป็นไปได้ไหมที่จะได้เวลาและใช้งานการตั้งเวลาแบบง่ายๆ ในตัวควบคุมของฉัน
แก้ไข: ฉันมีคอนโทรลเลอร์ดังต่อไปนี้ซึ่งทำหน้าที่กำหนดเวลา
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());
}
}
เมธอด myMethodAtScheduledTime
ถูกเรียกใช้ทุกๆ 10 หรือ 20 วินาที ฉันจะจำกัดการโทรเพียงครั้งเดียวได้อย่างไร กล่าวคือ ณ เวลานั้น เวลาอินสแตนซ์ของปฏิทิน + 2 นาที (calendar.add(Calendar.MINUTE, 2);
)