在特定日期和时间运行Liferay动态调度程序

时间:2016-05-05 07:36:32

标签: java triggers liferay liferay-6

我试图按小时调用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,但不知道如何以及在何处使用此类。

1 个答案:

答案 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。

我希望这可以帮到你