Spring @Configuration(非xml配置)用于注释驱动的任务

时间:2011-08-01 21:54:00

标签: spring spring-mvc annotations scheduled-tasks

任何人都可以解释如何在没有任何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配置时成功使用了该注释,但从未使用过注释。

4 个答案:

答案 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