Spring计划任务未在Windows 7上执行

时间:2012-06-21 15:20:10

标签: java spring scheduled-tasks

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

<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。

2 个答案:

答案 0 :(得分:1)

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

有关

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

答案 1 :(得分:0)

推测:生产环境中的任何运行的任何任务都是ejecutarejecutarReintentos。我想知道的可能是您的asyncExecutor线程池已用尽,它会触发调度程序上的Caller_RUNS,并且可能根本没有可用的调度程序池?