gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:38:45 24 4
gpt4 key购买 nike

我正在尝试按小时调用 Liferay 触发器,并且使用此 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>

然后,我在调度程序事件监听器类标记中引用的类中实现调度程序的业务逻辑。

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,您必须在本地线程中配置权限检查器,或者尝试使用不需要权限检查器的 api。听到的关键点是,在这种情况下,作业以异步方式启动,并且没有用户被记录,因此在 MessageListener 线程中没有配置权限检查器。

希望对你有帮助

关于java - 在特定日期和时间运行 Liferay 动态调度程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37045047/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com