2016-09-21 15 views
1

私はQuarz libraryで遊んでいますが、ジョブを実行するスケジューラを取得できません。ここでは、セットアップ:Tomcatの起動時にQuarz Schedulerを自動的に起動

<servlet> 
    <servlet-name>QuartzInitializer</servlet-name> 
    <servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class> 
    <init-param> 
    <param-name>config-file</param-name> 
    <param-value>quartz/quartz.properties</param-value> 
    </init-param> 
    <init-param> 
    <param-name>shutdown-on-unload</param-name> 
    <param-value>true</param-value> 
    </init-param> 
    <load-on-startup>2</load-on-startup> 
</servlet> 

quartz.propertiesファイルの内容:

私はのweb.xmlファイルに次のエントリを使用して(Tomcatのの)起動時に、スケジューラを起動します。

:私は、ログ出力から見ることができるよう

org.quartz.scheduler.interruptJobsOnShutdownWithWait=true 

#=================================================== 
# Configure the ThreadPool 
#=================================================== 

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool 
org.quartz.threadPool.threadCount = 10 
org.quartz.threadPool.threadPriority = 5 
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true 

#=================================================== 
# Configure the Job 
#=================================================== 

org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin 
org.quartz.plugin.jobInitializer.fileNames = quartz/jobs.xml 
org.quartz.plugin.jobInitializer.failOnFileNotFound = true 
org.quartz.plugin.jobInitializer.scanInterval = 10 
org.quartz.plugin.jobInitializer.wrapInUserTransaction = false 

スケジューラは、Tomcatと一緒に始まり0

INFO: QuartzInitializer: Scheduler has been started... 
Sep 21, 2016 12:50:49 PM org.apache.catalina.core.ApplicationContext log 
INFO: QuartzInitializer: Storing the Quartz Scheduler Factory in the servlet context at key: org.quartz.impl.StdSchedulerFactory.KEY 
Sep 21, 2016 12:50:49 PM org.apache.coyote.AbstractProtocol start 
INFO: Starting ProtocolHandler ["http-bio-8080"] 
Sep 21, 2016 12:50:49 PM org.apache.catalina.startup.Catalina start 
INFO: Server startup in 2373 ms 

問題はQuarzジョブが決して解雇されないことです。ここでjobs.xmlの内容:

<?xml version='1.0' encoding='utf-8'?> 
<job-scheduling-data xmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData http://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd" version="1.8"> 
    <schedule> 
    <job> 
     <name>Job</name> 
     <group>Job</group> 
     <description>Testing the job</description> 
     <job-class>dev.dit.scheduler.TestJob</job-class> 
    </job> 
    <trigger> 
     <cron> 
      <name>Trigger</name> 
      <job-name>Trigger</job-name> 
      <job-group>TriggerGroup</job-group> 
      <cron-expression>0 0/5 * * * ?</cron-expression> 
     </cron> 
    </trigger> 
</schedule> 

とTestJob.javaクラスの内容:TestJobが実行されることはありません、なぜ

public class TestJob implements Job { 

    @Override 
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { 
     System.out.println("Job executed!"); 
    } 
} 

は、誰かが私に言うことはできますか?

おかげ

答えて

1

日やなどのロガーの組み合わせのすべての種類を試して半分の後、私はちょうど慎重jobs.xmlファイルを読むことによって明らかにしました。

あなたは私の元の例で見ることができるように私はこのような仕事とジョブグループの名前:

<name>Job</name> 
<group>Job</group> 

が、私は、トリガ設定で名前とグループを参照していませんでした:

<job-name>Trigger</job-name> 
<job-group>TriggerGroup</job-group> 
ここで

jobs.xmlファイルの正しいセットアップ:

<?xml version='1.0' encoding='utf-8'?> 

<job-scheduling-data xmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData http://www.quartz-scheduler.org/xml/job_scheduling_data_2_0.xsd" 
    version="2.0"> 

<pre-processing-commands> 
    <delete-jobs-in-group>PROCESS_LEAD_JOB_GROUP</delete-jobs-in-group> 
    <delete-triggers-in-group>PROCESS_LEAD_TRIGGER_GROUP</delete-triggers-in-group> 
</pre-processing-commands> 

<schedule> 

    <job> 
     <name>Job</name> 
     <group>Jobs</group> 
     <description>Testing the job</description> 
     <job-class>dev.dit.scheduler.TestJob </job-class> 
    </job> 

    <trigger> 
     <cron> 
      <name>Trigger</name> 
      <job-name>Job</job-name> 
      <job-group>Jobs</job-group> 
      <cron-expression>0/10 * * * * ?</cron-expression> 
     </cron> 
    </trigger> 

</schedule> 

は、私はまた、クラスパスにlog4j.propertiesを置く:

package dev.dit.scheduler; 

import org.apache.log4j.Logger; 
import org.quartz.Job; 
import org.quartz.JobExecutionContext; 
import org.quartz.JobExecutionException; 

public class TestJob implements Job { 

    final static Logger logger = Logger.getLogger(TestJob.class); 

    @Override 
    public void execute(JobExecutionContext context) throws JobExecutionException { 

    logger.info("Job executed!"); 
    } 
} 

すべてが今、正常に動作します:

log4j.rootLogger = INFO, STDOUT, FILE 

log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender 
log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout 
log4j.appender.STDOUT.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n 

私は、ジョブファイルにロガーを追加しました。この情報が有用であれば、アップアップしてください。

ありがとう、 トーマス

関連する問題