任何人都可以解释如何在没有任何XML配置的情况下使用@Scheduled注释实现任务的基本配置吗?我可以找到的所有示例至少使用最小的XML配置。例如:
http://blog.springsource.com/2010/01/05/task-scheduling-simplifications-in-spring-3-0/
这使用典型的:
<context:component-scan base-package="org/springframework/samples/task/basic/annotation"/>
<task:annotation-driven/>
所以我只是使用@Configuration注释和一堆@Bean注释。它们都是在启动时实例化的,但是@Scheduled的那个没有运行。我在过去使用XML配置时成功使用了该注释,但从未使用过注释。
答案 0 :(得分:15)
只需在WebMvcConfig类
上添加@EnableScheduling即可@Configuration
@EnableWebMvc
@EnableAsync
@EnableScheduling
public class WebMvcConfig extends WebMvcConfigurerAdapter {
/** Annotations config Stuff ... **/
}
答案 1 :(得分:4)
<task:annotation-driven />
注释最终声明ScheduledAnnotationBeanPostProcessor以读取代码中的@Scheduled注释。见这里:http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/scheduling/annotation/ScheduledAnnotationBeanPostProcessor.html。
负责<task:annotation-driven />
行。要获取组件扫描,您需要使用AnnotationConfigApplicationContext。不确定是否/如何使用Web容器。
答案 2 :(得分:3)
在Spring 3.0中,您仍然需要一点点XML。但是,Spring 3.1(仍处于测试阶段)引入了额外的注释选项来缩小差距,消除了对XML配置的任何需求。
请参阅this blog entry了解其完成情况。在使用生产代码中的Spring版本之前要非常小心 - 但它们确实不稳定。
答案 3 :(得分:1)
到目前为止,答案对Spring的早期版本都有帮助。 这是为Spring 4量身定制的一个:
假设您为主要的Application类注释了组件扫描,如下所示:
@ComponentScan({"com.my.class"})
在该软件包中,您有一个如下所示的工作类:
@Configuration
@EnableScheduling
public class MyJobClass {
@Scheduled (cron = "* * * * * *")
public void runJob() throws DocumentException {
thingsToDoOnSchedule();
}
}
请注意,使用@Scheduled注释的方法必须返回void,并且您的cron表达式需要包含6个字符(此处显示的示例每秒运行一次,这样可以更轻松地测试您的工作)。
您还需要@Configuration和@EnableScheduling的类级别注释才能使其正常工作。它们本身似乎都被忽略了。
如需进一步阅读,请访问Spring 4 Enable Scheduling Reference Doc。