0

私はクラスター化された Quartz (バージョン 2.1.6) スケジューラーを持っていますが、これは websphere クラスターにデプロイすると正常に動作するようです。スケジューラーは Spring (バージョン 3.1.3_RELEASE) によって作成されます。

<bean id="scheduler-JDBC" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" abstract="true">
    <property name="dataSource" ref="myDataSource" />
    <property name="transactionManager" ref="transactionManager" />
    <property name="jobFactory">
        <bean class="org.springframework.scheduling.quartz.SpringBeanJobFactory" />
    </property>
    <property name="overwriteExistingJobs" value="true" />
    <property name="quartzProperties">
        <props>
            <prop key="org.quartz.jobStore.isClustered">true</prop>            
            <prop key="org.quartz.jobStore.driverDelegateClass">${org.quartz.jobStore.driverDelegateClass}</prop>
            <prop key="org.quartz.scheduler.instanceId">AUTO</prop>
            <prop key="org.quartz.scheduler.skipUpdateCheck">true</prop>
        </props>
    </property>
</bean>

<bean id="cronScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" parent="scheduler-${scheduler:RAM}" depends-on="quartzDatabaseInitializer">
    <property name="startupDelay" value="10" />
    <property name="autoStartup" value="true" />
    <property name="applicationContextSchedulerContextKey" value="applicationContext"/>
    <property name="triggers">
        <list>
            <ref bean="cronTriggerStats" />             
        </list>
    </property>
</bean>

トリガーとジョブはデータベースに保存されます。ジョブは、job_name="serverStatsJob" および job_group="DEFAULT" で作成されます。トリガーは 20 分ごとに実行されます。ジョブを手動でトリガーするにはどうすればよいですか?

私が試してみました

StdScheduler cronScheduler = (StdScheduler)springContext.getBean("cronScheduler");
cronScheduler.triggerJob(new JobKey("serverStatsJob", "DEFAULT"));

JDBCの代わりにRAMストアを使用すると機能します

また、保存されたジョブで新しいトリガーを作成しようとしました

Trigger trigger1 = newTrigger()
.withIdentity("serverStatsJobTrigger", "userRequested")
.withSchedule(simpleSchedule()
.withRepeatCount(0))
.startNow()
.forJob(new JobKey("serverStatsJob", "DEFAULT"))
.build();
cronScheduler.scheduleJob(trigger1);

しかし、それも機能しません。誰か助けてくれませんか

4

1 に答える 1

0

私は自分で問題を見つけました。スケジューラがトランザクションで正しく実行されていません。

<tx:advice>スケジューラに を追加したところ、動作するようになりました。

<aop:config>
    <aop:pointcut id="quartzSchedulerPointcut" expression="execution(* org.quartz.Scheduler.*(..))" />
    <aop:advisor advice-ref="quartzSchedulerAdvice" pointcut-ref="quartzSchedulerPointcut" />
</aop:config>

<tx:advice id="quartzSchedulerAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="*"/>
    </tx:attributes>
</tx:advice>
于 2013-04-24T12:17:47.093 に答える