【问题标题】:Scheduling job with liferay 6.1使用 liferay 6.1 安排工作
【发布时间】:2019-01-27 06:30:48
【问题描述】:

我引用这个链接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.xml 文件中添加了这个 portlet,如下所示:-

<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

【问题讨论】:

    标签: java liferay-6 job-scheduling


    【解决方案1】:

    我已根据您的问题创建了一个工作 portlet,它在我的控制台中每 5 秒显示一次“hello world”(在 Liferay EE 6.1.30 上)。

    让我把详细步骤发给你:

    1. 我使用 Liferay Developer Studio 1.6.3 为 Liferay 6.1 开发了一个新的调度程序 portlet
    2. 在 Developer Studio 中,我点击了文件 -> 新建 -> Liferay 项目
    3. 作为“Liferay Portal Runtime”环境,我使用了从以下位置提取的门户:liferay-portal-tomcat-6.1-ee-ga3-sp5-20160201142343123.zip
    4. 在我的项目中,我点击了文件 -> 新建 -> Liferay portlet 并接受了默认设置(注意:我会避免在 portlet 或类名中使用像“-”这样的字符)
    5. 然后我在我的项目中创建了一个新类“SchedulerLiferay”,它看起来和你的一样

    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>
    

    注意:我认为'simple trigger'和'cron'不应该一起使用。 这可能是它在您身边不起作用的原因。

    1. 我通过在 portlet-class 标记中定义我的类名来修改我的 portlet.xml: com.test.QuartzDemo
    2. 如果您遇到此问题: “排队 QuartzDemo-portlet 进行部署,因为它缺少 portal-compat-hook” 解决方案在这里描述: https://community.liferay.com/forums/-/message_boards/message/27738413
    3. 我部署了我的 portlet 此时您可能会遇到 ecj.jar 问题,可以通过以下方式解决:
      1. 转到窗口>首选项> Ant>运行时>类路径
      2. 添加外部 jar(例如:E:\liferayliferay-plugins-sdk-6.1.0-ce-ga1-20120106155615760\lib\ecj.jar),即位于插件 sdk 文件夹下的 ecj.jar。
      3. 现在重新运行构建脚本

    确保使用兼容 1.6 的 JVM。

    在第 6 步,我们需要特别小心,用正确的类名填写这个标签: com.test.SchedulerLiferay

    您可以在此处找到 portlet 的源代码: https://github.com/peterpetrekanics/QuartzDemo-portlet-6130

    如果您有任何问题,请随时在此处发布,
    最好的问候,
    彼得

    【讨论】:

      【解决方案2】:

      Liferay Cron 调度器有点敏感,不接受每个值。

      你可以用这个每分钟执行一次作业:

      0 0/1 * 1/1 * ? *
      

      http://www.cronmaker.com/ 上,你的猫得到了 Liferay 接受的表达式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多