我对计划任务有一种奇怪的行为。我有以下设置
<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。
答案 0 :(得分:1)
Windows中的计划异步方法似乎存在问题。这与JVM如何在Windows上创建线程
有关尝试删除@Async并检查它是否有效
答案 1 :(得分:0)
推测:生产环境中的任何运行的任何任务都是ejecutar
或ejecutarReintentos
。我想知道的可能是您的asyncExecutor线程池已用尽,它会触发调度程序上的Caller_RUNS,并且可能根本没有可用的调度程序池?