我试图按小时呼叫Liferay Trigger,并且使用此link可以成功运行

但是现在我只想在数据库中用户设置的开始和结束日期时间上动态执行触发器

调度表

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工作,但不知道如何以及在哪里使用该类。

最佳答案

我在工作中使用的方法如下:

首先,我在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线程中未配置权限检查程序之前,不会记录任何用户。

希望对您有所帮助

07-24 09:54