2017-03-22 11 views
0

私は以下のように定義されたスプリングスケジューラを持っています。私はこのスケジューラーをプログラムで作成したいと思います。スプリングスケジュールされたジョブをプログラマチックに作成する方法は?

私が本当にやりたいことは、自分のデータベースからcronExpressionを取得し、executorJobとTriggerを動的に作成してjobdetailsとトリガーに追加したいと思うことです。 quartzPropertiesは変更されないため、動的に作成する必要はありません。これを行う方法はありますか?

<bean id="testExecutorJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> 
    <property name="targetObject" ref="testExecutor" /> 
    <property name="targetMethod" value="runTest" /> 
</bean> 

<bean id="testTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> 
    <property name="jobDetail" ref="testExecutorJob" /> 
    <property name="cronExpression" value="0 0 0/3 1/1 * ? *" /> 
</bean> 

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
    <property name="overwriteExistingJobs" value="true"/> 
    <property name="autoStartup" value="true" /> 
    <property name="quartzProperties"> 
     <props> 
      <prop key="org.quartz.scheduler.instanceName">MyScheduler</prop> 
      <prop key="org.quartz.scheduler.instanceId">AUTO</prop> 
      <prop key="org.quartz.scheduler.skipUpdateCheck">true</prop> 
      <prop key="org.quartz.jobStore.misfireThreshold">60000</prop> 
      <prop key="org.quartz.jobStore.class">org.quartz.simpl.RAMJobStore</prop> 
      <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop> 
      <prop key="org.quartz.threadPool.threadCount">5</prop>     
     </props> 
    </property> 
    <property name="jobDetails"> 
     <list> 
      <ref bean="testExecutorJob" /> 
     </list> 
    </property> 
    <property name="triggers"> 
     <list> 
      <ref bean="testTrigger" /> 
     </list> 
    </property> 
</bean> 

答えて

1

これは私が//

 sched = new StdSchedulerFactory().getScheduler(); 
     sched.start(); 

いくつかのジョブを実行する方法の例であるジョブを作成

 JobDetail job = JobBuilder.newJob(myClass.class) 
        .withIdentity("cronjob", "crongroup") 
        .usingJobData("param1", "someparam") 
        .build(); 

//トリガ

 Trigger trigger = trigger = TriggerBuilder 
          .newTrigger() 
          .withSchedule(CronScheduleBuilder.cronSchedule(cronString)) 
          .build(); 

// scheuleを作成それ

 sched.scheduleJob(job, trigger); 
+0

私は多くの問題があると思います。私のTestExecutorクラスはorg.quartz.Jobクラスを拡張するのではなく、他のいくつかのクラスを拡張します。 JobBuilder.newJob(myClass.class)には、Jobクラスを拡張するクラスが必要です。 – hellzone

+0

'' implementsではない、 'myClass'は' Job'を実装する必要があります。 –

+0

このインターフェースを実装できますが、TestExecutorクラスに3つの異なるスケジューラーメソッドがあります(runTest() 、runTest2()、runTest3())私はどのようにexecuteメソッドをオーバーライドし、3つの異なるスケジューラータスクでこのメソッドを呼び出すのかわかりません。 – hellzone

関連する問題