수색…


비고

스케줄러는 일정한 간격으로 백그라운드 작업을 수행합니다.

Liferay 포틀릿 DTD 별

<! - scheduler-entry 요소는 스케줄러의 선언적 데이터를 포함합니다. ->

! ELEMENT scheduler-entry (스케줄러 설명, 스케줄러 이벤트 리스너 클래스, 트리거)

<! - 스케줄러 설명 값은 스케줄러를 설명합니다. ->

! ELEMENT 스케줄러 설명 (#PCDATA)

<! - scheduler-event-listener-class 값은 com.liferay.portal.kernel.messaging.MessageListener를 구현하는 클래스 여야합니다. 이 클래스는 trigger 요소에 의해 지정된 일정한 간격으로 메시지를 수신합니다. ->

! ELEMENT 스케줄러 이벤트 리스너 클래스 (#PCDATA)

<! - trigger 요소에는 scheduler-event-listener-class에 지정된 클래스를 트리거 할시기를 나타내는 구성 데이터가 들어 있습니다. ->

! ELEMENT 트리거 (cron | 단순)

몇 가지 정보를 표시하는 석영 스케쥴러 만들기

스케줄러를 생성하려면, 다음 항목을 작성해야합니다.

liferay-portlet.xml

스케쥴러 트리거 및 타이밍을위한 스케쥴러 클래스 및 트리거 값 증명

<portlet-name>GetSetGo</portlet-name>
        <icon>/icon.png</icon>
        <scheduler-entry>
        <scheduler-description>This scheduler logs User count from portal</scheduler-description>
            <scheduler-event-listener-class>com.example.scheduler.SchedulerSample</scheduler-event-listener-class>
            <trigger>
                 <simple>
                   <simple-trigger-value>
                     5
                   </simple-trigger-value>
                <time-unit>minute</time-unit>
            </simple>
            </trigger>
        </scheduler-entry>

주어진 엔트리는

  1. 스케줄러 설명

  2. MessageListener 클래스를 구현하는 클래스 이름

  3. 트리거, 스케줄러의 트리거 포인트 정의 간격을 제공합니다.

    - 크론 사용

    - 간단한 트리거 값 사용

주어진 예제에서 스케줄러는 5 분마다 트리거합니다.

다음으로 우리는 스케줄러 클래스를 생성 할 필요가있다.

package com.example.scheduler;

import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.messaging.Message;
import com.liferay.portal.kernel.messaging.MessageListener;
import com.liferay.portal.kernel.messaging.MessageListenerException;
import com.liferay.portal.service.UserLocalServiceUtil;

public class SchedulerSample implements MessageListener {

    @Override
    public void receive(Message arg0) throws MessageListenerException {
        Log log=LogFactoryUtil.getLog(SchedulerSample.class);
        
        try {
            log.info("User Count for portal:"+UserLocalServiceUtil.getUsersCount());
        } catch (SystemException e) {
            
            log.info("User count is currently unavailable");
        }
        
    }

}

이 스케줄러는 모든 트리거 간격 후 출력 포털 사용자 수를 서버 콘솔에 표시합니다.

프로그래밍 방식으로 동적 인 쿼츠 스케쥴러 생성

스케쥴러가 트리거되어야 할 때의 사용자 입력을 기반으로 Quartz 스케쥴러를 생성해야 할 필요가있는 특정 시나리오가 있습니다. 우리는 특정 사전 정의 기능이있는 경우를 처리 할 수 ​​있습니다. 사용자 행동.

이 예는 스케줄러를 트리거하기 위해 트리거 타이밍에서 사용자 입력을 수신합니다. ScheduledJobListener 클래스는 ScheduledJobListener 를 트리거 할 때 실행될 비즈니스 로직을 포함하는 imlements MessageListener 합니다. 필요한 params를 구성한 후 SchedulerEngineHelperUtil 클래스를 사용하여 작업을 트리거합니다.

  1. 트리거 (cron 텍스트 문자열 및 작업 이름 사용)
  2. 메시지 (MessageListener 클래스 및 portletId 구현 사용)
  3. 스케줄러 저장소 유형 (기본적으로 MEMORY_CLUSTERED, DB에 저장되도록 PERSISTED로 설정할 수 있음)
  4. 사용할 MessageBus 목적지를 결정하는 DestinationNames (Liferay의 경우 SCHEDULER_DISPATCH)

아래의 스 니펫은 사용자와 상호 작용하는 포틀릿의 동작 단계의 일부로 쿼츠 작업을 만들고 예약합니다.

   //Dynamic scheduling
    String portletId= (String)req.getAttribute(WebKeys.PORTLET_ID);
                  
    String jobName= ScheduledJobListener.class.getName();
           
    Calendar startCalendar = new GregorianCalendar(year , month, day, hh, mm, ss);
    String jobCronPattern = SchedulerEngineHelperUtil.getCronText(startCalendar, false);
                                //Calendar object & flag for time zone sensitive calendar
    
    Trigger trigger=new CronTrigger(ScheduledJobListener.class.getName(),ScheduledJobListener.class.getName(), jobCronPattern);
            
    Message message=new Message();
    message.put(SchedulerEngine.MESSAGE_LISTENER_CLASS_NAME,jobName);
    message.put(SchedulerEngine.PORTLET_ID, portletId);
    
    try {
          SchedulerEngineHelperUtil.schedule(
                trigger,StorageType.PERSISTED,"Message_Desc",DestinationNames.SCHEDULER_DISPATCH,
                message,0);                    
         } catch (SchedulerException e) 
                {
                    e.printStackTrace();
                }

여기서는 cron 텍스트를 만들기 위해 사용자 입력에서 params가 검색됩니다. cron 텍스트의 경우 cron 패턴을 만들기 위해 주어진 참조를 사용할 수도 있습니다

    1. Seconds
    2. Minutes
    3. Hours
    4. Day-of-Month
    5. Month
    6. Day-of-Week
    7. Year (optional field)
    **Expression**     **Meaning**
    0 0 12 * * ?     Fire at 12pm (noon) every day
    0 15 10 ? * *     Fire at 10:15am every day
    0 15 10 * * ?     Fire at 10:15am every day
    0 15 10 * * ? *     Fire at 10:15am every day
    0 15 10 * * ? 2005     Fire at 10:15am every day during the year 2005
    0 * 14 * * ?     Fire every minute starting at 2pm and ending at 2:59pm, every day
    0 0/5 14 * * ?     Fire every 5 minutes starting at 2pm and ending at 2:55pm, every day
    0 0/5 14,18 * * ?     Fire every 5 minutes starting at 2pm and ending at 2:55pm, AND fire every 5 minutes starting at 6pm and ending at 6:55pm, every day
    0 0-5 14 * * ?     Fire every minute starting at 2pm and ending at 2:05pm, every day
    0 10,44 14 ? 3 WED     Fire at 2:10pm and at 2:44pm every Wednesday in the month of March.
    0 15 10 ? * MON-FRI     Fire at 10:15am every Monday, Tuesday, Wednesday, Thursday and Friday
    0 15 10 15 * ?     Fire at 10:15am on the 15th day of every month
    0 15 10 L * ?     Fire at 10:15am on the last day of every month
    0 15 10 L-2 * ?     Fire at 10:15am on the 2nd-to-last last day of every month
    0 15 10 ? * 6L     Fire at 10:15am on the last Friday of every month
    0 15 10 ? * 6L     Fire at 10:15am on the last Friday of every month
    0 15 10 ? * 6L 2002-2005     Fire at 10:15am on every last friday of every month during the years 2002, 2003, 2004 and 2005
    0 15 10 ? * 6#3     Fire at 10:15am on the third Friday of every month
    0 0 12 1/5 * ?     Fire at 12pm (noon) every 5 days every month, starting on the first day of the month.
    0 11 11 11 11 ?     Fire every November 11th at 11:11am.

사용자 입력을 기반으로 사용할 crontext 문자열을 직접 생성합니다.

 String jobCronPattern="0 */5 * * * ?";

이 경우 5 분마다 화재가 발생합니다.

참고 문헌 :

  1. 동적 스케줄러 생성
  2. 스케줄러 응용 프로그램
  3. Quartz FAQs


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow