我试图按小时调用Liferay Trigger并使用此link
成功运行但现在我想仅在Start& amp;上动态执行Trigger。用户在数据库中设置的结束日期时间
计划表
schedulerId schedulerStartDateTime schedulerEndDateTime blockId
1 05/11/2016 01:00 05/13/2016 02:00 11011
2 05/12/2016 13:00 05/16/2016 16:30 11012
3 05/11/2016 20:15 05/20/2016 22:00 11013
任何帮助都将不胜感激。
我从this Post读到它正在使用SchedulerEntry,但不知道如何以及在何处使用此类。
答案 0 :(得分:0)
我在工作中使用的方法如下:
首先我在liferay-portlet.xml中配置如下的调度程序:
<?xml version="1.0"?>
<!DOCTYPE liferay-portlet-app PUBLIC "-//Liferay//DTD Portlet Application 6.2.0//EN" "http://www.liferay.com/dtd/liferay-portlet-app_6_2_0.dtd">
<liferay-portlet-app>
<portlet>
<portlet-name>your-portelt</portlet-name>
<icon>/icon.png</icon>
<scheduler-entry>
<scheduler-event-listener-class>your.class.that.implements.messagelistener</scheduler-event-listener-class>
<trigger>
<cron>
<cron-trigger-value>.... your cron</cron-trigger-value>
</cron>
</trigger>
</scheduler-entry>
...
</portlet>
...
</liferay-portlet-app>
然后我在一个我在scheduler-event-listener-class标签中引用的类中实现了sheduler的业务逻辑。
public class YourManageScheduler implements MessageListener {
@Override
public void receive(Message message) throws MessageListenerException {
User user = ....
PermissionChecker permissionChecker = PermissionCheckerFactoryUtil.getPermissionCheckerFactory().create(user);
PermissionThreadLocal.setPermissionChecker(permissionChecker);
// your logic
...
// your logic
....
}
...
}
如果您使用一些预先形成PermissionCheker的api,您已经在本地线程中配置了permision cheker,或者尝试使用不需要权限cheker的api,那么这很重要。关键点是,在这种情况下,作业以异步方式启动,并且没有用户被记录,因此在MessageListener线程中没有配置权限cheker。
我希望这可以帮到你