【发布时间】:2012-10-15 08:51:20
【问题描述】:
我是第一次使用 Spring 任务执行器系统,但无法让它工作......
我已经阅读了various posts on SO 关于此的内容,但没有任何迹象表明该任务正在执行。首先,我在我的服务 bean 上尝试了 @Scheduled 注释,但是在阅读了这遇到了 AOP 代理问题后,我正在使用直接的 XML 配置:
<task:executor id="executorWithPoolSizeRange"
pool-size="5-25"
queue-capacity="100" />
<task:scheduler id="taskScheduler" pool-size="2" />
<task:scheduled-tasks>
<task:scheduled ref="fileWriter" method="test" fixed-rate="5000" />
</task:scheduled-tasks>
fileWriter bean 是常规 Spring bean,测试方法如下:
public void test (){
System.err.println("run in job");
}
通过使用 DEBUG 日志记录设置运行,我知道以下内容:
- bean 已加载并初始化。
- 如果我输错了“方法”属性的名称,则会引发异常,因此至少会解析任务定义。
- 调试语句中没有任何内容表明任务已激活
- 永远不会触发测试方法中的断点。
我希望在我的应用程序或弹簧单元测试运行时每 5 秒看到一次,从控制台上打印出来自 test() 方法的消息。我正在使用 Spring 3.0.6 并在 Mac 10.6 Java 6 上的 Eclipse 3.7 中测试通过 Jetty 运行的应用程序。我们使用的所有其他 Spring 功能(数据库、安全性、MVC 工作正常)。非常感谢任何建议!
【问题讨论】:
-
我没有将它与 XML 一起使用,但是当我将它与注释一起使用时,正在计划的类必须具有 @Component 注释。你对 fileWriter 的定义是什么?
-
感谢您的回复 -
<bean id="fileWriter" class="com.blah.archive.FileArchiveWriter"> <property name="archiveRoot" value="./archive"></property> </bean>,我添加了一个组件注释并将包添加到扫描的列表中:<context:component-scan base-package="com.blah.service,com.blah.model.archive"/>。但是仍然没有激活该方法(当我在@Service bean中调度一个方法时) -
刚刚意识到我在之前的评论中打错了包名:应该是
com.blah.archive.FileArchiveWriter和<context:component-scan base-package="com.blah.service,com.blah.archive"/> -
我个人觉得注释更容易处理。忽略您的 AOP 问题,它是否适用于注释?如果是这样,那么一旦它与注释一起使用,您就可以转换为 xml
-
不,正是注释缺乏成功促使我尝试 XML 配置。我同意这些注释使用起来更有吸引力,如果我能让这些东西正常工作,我会更喜欢!
标签: java spring scheduled-tasks