4

我对计划任务有一个奇怪的行为。我有以下设置

<task:scheduled-tasks>
      <task:scheduled ref="servicioEjecucionReportes" method="ejecutar" cron="0 0 * * * *" />
      <task:scheduled ref="servicioEjecucionReportes" method="ejecutarReintentos" cron="0 30 * * * *" />
      <task:scheduled ref="servicioEjecucionReportes" method="enviarReporteDiario" cron="0 15 0 * * *" />
</task:scheduled-tasks>

执行器是这样配置的:

<task:annotation-driven executor="asyncExecutor" scheduler="taskScheduler" />
<task:executor id="asyncExecutor" rejection-policy="CALLER_RUNS" pool-size="16" />
<task:scheduler id="taskScheduler" pool-size="8" />

问题是,我们正在使用 linux 和 mac os 进行开发,并且这三个任务都可以正确执行,但是在 Windows 7 Server 的部署服务器上,前两个可以正确执行,而第三个则不能。

我需要在每天 00:15 执行第三个任务。

我尝试过更改配置,但行为始终相同,在开发和测试环境中一切正常,但在生产环境中却不行。

我有点迷失在哪里看或这有什么问题。

bean 是这样声明的:

<bean id="servicioEjecucionReportes" class="com.mycompany.beans.ServicioEjecucionReportesImpl" />

界面是:

public interface ServicioEjecucionReportes {

   public void ejecutar();

   public void ejecutarReintentos();

   public void enviarReporteDiario();
}

编辑:额外信息,在服务器日志上,我们甚至看不到尝试运行的任务,春季版本是 3.1.0。

4

2 回答 2

1

Windows 中计划的异步方法似乎存在问题。这与 JVM 如何在 Windows 上创建线程有关

尝试删除 @Async 并检查它是否有效

于 2012-06-26T15:05:24.983 回答
0

推测:您的任何任务是否有机会在生产环境中运行很长时间ejecutar-或ejecutarReintentos. 我想知道的是您的 asyncExecutor 线程池可能已耗尽,这会触发您的调度程序上的 Caller_RUNS,并且可能根本没有更多的调度程序池可用?

于 2012-06-21T15:34:53.497 回答