Здравствуйте.
Имеется следующая конфигурация:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
<!-- Scheduler -->
<bean id="commonSchedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<qualifier value="job-planner"/>
<property name="autoStartup" value="false"/>
<property name="dataSource" ref="scheduleDataSource"/>
<property name="jobFactory">
<bean class="org.springframework.scheduling.quartz.SpringBeanJobFactory"/>
</property>
<property name="overwriteExistingJobs" value="false"/>
<property name="applicationContextSchedulerContextKey" value="applicationContext"/>
<property name="transactionManager" ref="scheduleTxManager"/>
<property name="quartzProperties">
<props>
<prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop>
<prop key="org.quartz.jobStore.driverDelegateClass">org.quartz.impl.jdbcjobstore.StdJDBCDelegate</prop>
<prop key="org.quartz.jobStore.isClustered">false</prop>
<prop key="org.quartz.jobStore.misfireThreshold">180000</prop>
<prop key="org.quartz.jobStore.clusterCheckinInterval">90000</prop>
<prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
<prop key="org.quartz.threadPool.threadCount">1</prop>
<prop key="org.quartz.scheduler.skipUpdateCheck">true</prop>
</props>
</property>
</bean>
<bean name="mailingJob" class="org.springframework.scheduling.quartz.JobDetailBean" autowire="constructor">
<property name="jobClass" value="com.test.MyJob"/>
<property name="jobDataAsMap">
<map>
<entry key="mailTask" value-ref="mailTask" />
</map>
</property>
<property name="name" value="Mail"/>
<property name="group" value="EventMailing"/>
<property name="requestsRecovery" value="true"/>
<property name="durability" value="true"/>
</bean>
<!-- Executor -->
<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<qualifier value="job-executor"/>
<property name="jobDetails">
<array>
<ref bean="mailingJob" />
</array>
</property>
<property name="dataSource" ref="scheduleDataSource"/>
<property name="jobFactory">
<bean class="org.springframework.scheduling.quartz.SpringBeanJobFactory"/>
</property>
<property name="overwritemoExistingJobs" value="false"/>
<property name="applicationContextSchedulerContextKey" value="applicationContext"/>
<property name="quartzProperties">
<props>
<prop key="org.quartz.scheduler.idleWaitTime">180000</prop>
<prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop>
<prop key="org.quartz.jobStore.driverDelegateClass">org.quartz.impl.jdbcjobstore.StdJDBCDelegate</prop>
<prop key="org.quartz.jobStore.isClustered">false</prop>
<prop key="org.quartz.jobStore.misfireThreshold">180000</prop>
<prop key="org.quartz.jobStore.clusterCheckinInterval">90000</prop>
<prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
<prop key="org.quartz.threadPool.threadCount">5</prop>
<prop key="org.quartz.scheduler.skipUpdateCheck">true</prop>
</props>
</property>
</bean>
В Scheduler-e есть метод:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
@Transactional
public void triggerMailSend(String recipient, String report) {
try {
JobDataMap jobDataMap = new JobDataMap();
jobDataMap.put("recipient", recipient);
jobDataMap.put("details", report);
commonSchedulerFactoryBean.getObject().triggerJob("Mail", "EventMailing", jobDataMap);
} catch (SchedulerException e) {
throw new RuntimeException(e);
}
}
При вызове этого метода в таблице QRTZ_TRIGGERS появляется запись с одинаковыми NEXT_FIRE_TIME и START_TIME, и статусом WAITING.
Обрабатывается она за время от 40 сек до 2 минут приблизительно.
Подскажите, что именно влияет на время обработки. (какие параметры, условия и т.д.). И как можно добится немедленного выполнения job-а?
Спасибо.