В настоящее время я использую пружинный кварц для запуска трех разных работ в разное время.Я использую три разных планировщика для каждого триггера.Этот сценарий работает отлично в течение первых нескольких часов, но затем все кварцевые нити блокируются.Ниже приведено определение моего компонента:
> <!-- TRAFFIC POLLER DECLERATION -->
> <!-- job -->
> <bean id="TriggerJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
> <property name="targetObject" ref="TriggerClass" />
> <property name="targetMethod" value="trigger" />
> </bean>
>
> <!-- trigger -->
> <bean id="trigger1" class="org.springframework.scheduling.quartz.CronTriggerBean">
> <property name="jobDetail" ref="TriggerJob" />
> <property name="cronExpression" value="${trigger.cron}" />
> </bean>
>
> <!-- SCHEDULER -->
> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
> <property name="waitForJobsToCompleteOnShutdown" value="true" />
> <property name="triggers">
> <list>
> <ref bean="trigger1" />
> </list>
> </property>
> </bean>
Ниже приведена трассировка стека от моей jconsole заблокированных потоков:
Name: org.springframework.scheduling.quartz.SchedulerFactoryBean#1_Worker-5
State: BLOCKED on java.lang.Object@131b502 owned by: org.springframework.scheduling.quartz.SchedulerFactoryBean#1_Worker-6
Total blocked: 20 Total waited: 101,919
Stack trace:
com.ecs.Trigger.TriggerClass trigger(TriggerClass.java:89)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:273)
org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:264)
org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:86)
org.quartz.core.JobRunShell.run(JobRunShell.java:216)
org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549)
Кто-нибудь знает, почему у меня это происходит?Заранее спасибо.