【发布时间】:2014-09-27 13:32:21
【问题描述】:
我有一个 spring 批处理管理项目 (1.3.0.RC1),我正在尝试启用 TaskScheduler 以使用 cron 表达式运行作业。
我有一个春季批处理管理项目,而我的批处理作业还有另一个项目。我可以通过管理控制台手动执行该作业(这意味着它可以正常加载并且可以正常工作)。但是,该作业永远不会按 cron 计划执行。
如果我使用 main 方法配置 java 类并使用相同的作业 xml 文件将其作为 java 应用程序运行,则作业将按 cron 计划运行(换句话说,在 Spring 批处理管理控制台之外运行作业)。这也应该验证 xml 配置是否正常。
这有效: project2 app.java
public static void main(String[] args) {
String springConfig = "META-INF/spring/batch/jobs/scheduleTest.xml";
ApplicationContext context = new ClassPathXmlApplicationContext(springConfig);
}
project2 META-INF/spring/jobs/scheduleTest.xml
<job id="test-job"
xmlns="http://www.springframework.org/schema/batch">
<step id="testJob">
<tasklet transaction-manager="transactionManager" ref="testOutput"/>
</step>
</job>
<bean id="testOutput" class="com.default.test.testOutput" />
<task:scheduled-tasks>
<task:scheduled ref="runIt" method="run" cron="30 * * * * ?" />
</task:scheduled-tasks>
<bean id="runIt" class="com.default.scheduler.RunScheduler">
<property name="job" ref="test-job" />
<property name="jobLauncher" ref="jobLauncher"/>
<property name="runCron" value="true" />
</bean>
作业每 30 秒运行一次,并将一些测试输出打印到控制台。
不起作用: 当我运行 Spring Batch 管理控制台时,project2 与 project1 打包,job.xml 文件成为类路径的一部分,并且该作业在控制台中注册并且可以启动。我可以从控制台运行它,它工作正常,但它不会在预定时间自动运行。在我手动执行后,它也不会在预定时间开始运行。
有人看到我在这里做错了吗?任何指针将不胜感激。或者,如果有人知道在 SBA 中使用 Spring TaskScheduler(不是石英)的示例,那也会有所帮助。提前致谢。我的猜测是 cron 表达式正在存储到不再存在或 SBA 控制台不知道的应用程序上下文中。
【问题讨论】:
-
SBA 如何知道它有两个调用您的 App.java?
-
在项目 2 上,尝试将您的
scheduleTest.xml添加到META-INF/spring/batch/jobs下(不要忘记batch文件夹) -
@OussamaZoghlami 是的,很好。我在描述中拼错了,但实际上在
META-INF/spring/batch/jobs
标签: spring scheduled-tasks spring-batch spring-batch-admin