2

多くの情報源から、リスナーをインスタンス化してスケジューラーにすべてプロパティファイルで登録できることが可能であり、意図されていると人々が言っ​​ていることを読みました。

しかし、私はどこでも検索しましたが、この例は 1 つも見つかりません。

注: このQuartz Initiazlizer Servletを使用して、スケジューラを開始しています。そのため、従来の JobListener をスケジューラーに登録する方法は使えません。これを行う他の方法は非常に受け入れられています

基本的に私はこれをしたい:

JobListener jobListener = new SchedulerGlobalListener();
scheduler.getListenerManager().addJobListener(jobListener);

この中(quartz.propertiesの下)

org.quartz.jobListener.NAME.class = com.foo.MyListenerClass
org.quartz.jobListener.NAME.propName = propValue
org.quartz.jobListener.NAME.prop2Name = prop2Value

* * 以下は私が試したことと結果です

#quartz.properties#

org.quartz.jobListener.SchedulerGlobalListener.class = com.scheduler.SchedulerGlobalListener

#リスナークラス#

public class SchedulerGlobalListener implements JobListener {

    private String name;

    public SchedulerGlobalListener() {
    }

    public SchedulerGlobalListener(String name) {
        if(name.isEmpty())
        {
            this.name = "SchedulerGlobalListener";
        }
        else
        {
            this.name = name;
        }
    }

    @Override
    public String getName() {
        return name;
    }

    public String setName(String name) {
        return name;
    }

    @Override
    public void jobToBeExecuted(JobExecutionContext context) {
        // do something with the event
    }

    @Override
    public void jobWasExecuted(JobExecutionContext context, JobExecutionException   jobException) {
        System.out.println("I just ran this job: " +   context.getJobDetail().getJobClass().getName());
    }

    @Override
    public void jobExecutionVetoed(JobExecutionContext context) {
        // do something with the event
    }
    }

結果:

INFO: QuartzInitializer: Quartz Scheduler failed to initialize: java.lang.IllegalArgumentException: JobListener name cannot be empty.
4

3 に答える 3

1

ここでは、Quartz と wrtie を使用してジョブをトリガーする方法について説明します。

http://www.mkyong.com/java/quartz-joblistener-example/

Quartz には、ここで再開する Quartz ジョブの間隔を記述する cron 式があります。

  1. http://quartz-scheduler.org/documentation/quartz-1.x/tutorials/crontrigger
  2. http://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm cron 式の書き方を見つけました。

クォーツシンプルトリガー

Trigger trigger = TriggerBuilder
    .newTrigger()
    .withIdentity("TriggerName", "group1")
    .withSchedule(
        SimpleScheduleBuilder.simpleSchedule()
        .withIntervalInSeconds(5).repeatForever())
    .build();

クォーツクロントリガー

Trigger trigger = TriggerBuilder
    .newTrigger()
    .withIdentity("TriggerName", "group1")
    .withSchedule(
        CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
    .build();

スプリングを使用している場合は、すべてのクォーツ プロパティをコンテキスト ファイルで次のように指定できます。

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
        <list>
            <ref bean="cronTrigger" />
            <ref bean="simpleTrigger" />
        </list>
    </property>
    <property name="quartzProperties">
        <props>
            <prop key="propertName">propertyValue</prop>
        </props>
    </property>
</bean>

<bean id="beanName" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" destroy-method="destroy">  
      <property name="jobFactory">   
           <bean class="org.springframework.scheduling.quartz.SpringBeanJobFactory"/>  
       </property>
       <property name="dataSource" ref="JNDIDataSource" />  
       <property name="transactionManager" ref="transactionManager" />  

       <property name="quartzProperties">    
           <util:properties location="classpath:/quartz.properties"/>  
       </property>

       <property name="triggers">
            <list>
                <ref bean="triggerBean"/>
            </list>
       </property>
    </bean>
于 2013-06-20T03:08:58.553 に答える
1

あなたはすでにほとんどのことを行っています。

このリンクを参照してください。Quartz.properties ファイルでリスナー クラスの名前を指定し、指定したリスナー クラスがクラスパスにあることを確認するだけです。

ジョブリスナーをスケジューラーに登録する部分以外のジョブリスナーの使い方はこちらの記事を参考にしてください。代わりに、上記のプロパティを Quartz プロパティ ファイルに追加します。

于 2013-06-20T06:50:45.520 に答える