我引用了此链接link
安排我与liferay的工作。
我添加了Job Scheduler类:-
import com.liferay.portal.kernel.messaging.Message;
import com.liferay.portal.kernel.messaging.MessageListener;
import com.liferay.portal.kernel.messaging.MessageListenerException;
public class SchedulerLiferay implements MessageListener {
@Override
public void receive(Message arg0) throws MessageListenerException {
System.out.println("hello world");
}
}
在我的liferay portlet.xml文件中添加了:-
<portlet>
<portlet-name>quartz-demo</portlet-name>
<icon>/icon.png</icon>
<scheduler-entry>
<scheduler-event-listener-class>com.infinite.npsc.Job.SchedulerLiferay</scheduler-event-listener-class>
<trigger>
<!-- <simple>
<simple-trigger-value>
5
</simple-trigger-value>
<time-unit>second</time-unit>
</simple> -->
<cron>
<cron-trigger-value>0/5 * * * * ?</cron-trigger-value>
</cron>
</trigger>
</scheduler-entry>
<header-portlet-css>/css/main.css</header-portlet-css>
<footer-portlet-javascript>/js/main.js</footer-portlet-javascript>
<css-class-wrapper>quartz-demo-portlet</css-class-wrapper>
</portlet>
,我也将此portlet添加到我的 portlet.xml 文件中,如下所示:-
<portlet>
<portlet-name>quartz-demo</portlet-name>
<display-name>Quartz Demo</display-name>
<portlet-class>com.liferay.util.bridges.mvc.MVCPortlet</portlet-class>
<init-param>
<name>view-template</name>
<value>/view.jsp</value>
</init-param>
<expiration-cache>0</expiration-cache>
<supports>
<mime-type>text/html</mime-type>
</supports>
<portlet-info>
<title>Quartz Demo</title>
<short-title>Quartz Demo</short-title>
<keywords>Quartz Demo</keywords>
</portlet-info>
<security-role-ref>
<role-name>administrator</role-name>
</security-role-ref>
<security-role-ref>
<role-name>guest</role-name>
</security-role-ref>
<security-role-ref>
<role-name>power-user</role-name>
</security-role-ref>
<security-role-ref>
<role-name>user</role-name>
</security-role-ref>
</portlet>
工作无法运行。应用程序成功启动,但没有任何反应。我希望每5秒钟在控制台中打印一次hello world
。
答案 0 :(得分:0)
我已经根据您的问题创建了一个可运行的portlet,它在控制台(在Liferay EE 6.1.30上)中每5秒显示一次“ hello world”。
让我给您发送详细步骤:
:
import com.liferay.portal.kernel.messaging.Message;
import com.liferay.portal.kernel.messaging.MessageListener;
import com.liferay.portal.kernel.messaging.MessageListenerException;
public class SchedulerLiferay implements MessageListener {
@Override
public void receive(Message arg0) throws MessageListenerException {
System.out.println("hello world");
}
}
6。然后我像这样修改了liferay-portlet.xml:
<?xml version="1.0"?>
<!DOCTYPE liferay-portlet-app PUBLIC "-//Liferay//DTD Portlet Application 6.1.0//EN" "http://www.liferay.com/dtd/liferay-portlet-app_6_1_0.dtd">
<liferay-portlet-app>
<portlet>
<portlet-name>quartz-demo</portlet-name>
<icon>/icon.png</icon>
<scheduler-entry>
<scheduler-event-listener-class>com.test.SchedulerLiferay</scheduler-event-listener-class>
<trigger>
<simple>
<simple-trigger-value>5</simple-trigger-value>
<time-unit>second</time-unit>
</simple>
</trigger>
</scheduler-entry>
<header-portlet-css>/css/main.css</header-portlet-css>
<footer-portlet-javascript>/js/main.js</footer-portlet-javascript>
<css-class-wrapper>quartz-demo-portlet</css-class-wrapper>
</portlet>
<portlet>
<portlet-name>quartzdemo</portlet-name>
<icon>/icon.png</icon>
<instanceable>false</instanceable>
<header-portlet-css>/css/main.css</header-portlet-css>
<footer-portlet-javascript>
/js/main.js
</footer-portlet-javascript>
<css-class-wrapper>quartzdemo-portlet</css-class-wrapper>
</portlet>
<role-mapper>
<role-name>administrator</role-name>
<role-link>Administrator</role-link>
</role-mapper>
<role-mapper>
<role-name>guest</role-name>
<role-link>Guest</role-link>
</role-mapper>
<role-mapper>
<role-name>power-user</role-name>
<role-link>Power User</role-link>
</role-mapper>
<role-mapper>
<role-name>user</role-name>
<role-link>User</role-link>
</role-mapper>
</liferay-portlet-app>
注意:我认为“简单触发器”和“ cron”不应同时使用。 这可能就是它无法在您身边起作用的原因。
确保使用兼容1.6的JVM。
在第6步中,我们需要特别注意,以正确的类名填写此标签: com.test.SchedulerLiferay
您可以在此处找到portlet的源代码: https://github.com/peterpetrekanics/QuartzDemo-portlet-6130
如果您有任何疑问,请随时在此处发布,
最好的问候,
彼得
答案 1 :(得分:0)
Liferay Cron Scheduler 有点敏感,不接受每一个值。
你可以用这个每分钟执行一次作业:
--#SET TERMINATOR @
CREATE PROCEDURE UPDATE_LEADERS_SCORE (
IN in_School_ID INTEGER, IN in_Leader_Score INTEGER)
LANGUAGE SQL
MODIFIES SQL DATA
BEGIN
UPDATE "CHICAGO_PUBLIC_SCHOOLS"
SET "Leaders_Score" = in_Leader_Score
WHERE "School_ID" = in_School_ID;
IF in_Leader_Score >= 80 THEN
UPDATE "CHICAGO_PUBLIC_SCHOOLS"
SET "Leaders_Icon" = 'Very_Strong'
WHERE "School_ID" = in_School_ID;
ELSEIF in_Leader_Score>= 60 and in_Leader_Score <= 79 THEN
UPDATE "CHICAGO_PUBLIC_SCHOOLS"
SET "Leaders_Icon" = 'Strong'
WHERE "School_ID" = in_School_ID;
ELSEIF in_Leader_Score >= 40 and in_Leader_Score <= 59 THEN
UPDATE "CHICAGO_PUBLIC_SCHOOLS"
SET "Leaders_Icon" = 'Average'
WHERE "School_ID" = in_School_ID;
ELSEIF in_Leader_Score >= 20 and in_Leader_Score <= 39 THEN
UPDATE "CHICAGO_PUBLIC_SCHOOLS"
SET "Leaders_Icon" = 'Weak'
WHERE "School_ID" = in_School_ID;
ELSE
UPDATE "CHICAGO_PUBLIC_SCHOOLS"
SET "Leaders_Icon" = 'Very Weak'
WHERE "School_ID" = in_School_ID;
END IF;
END
@
在 http://www.cronmaker.com/ 上,您的猫得到 Liferay 接受的表达式。