如何自动将Spring Beans添加到TaskExecutor

时间:2010-09-17 08:15:51

标签: java spring

我正在寻找一种方法让spring bean将自己注册到一个作业处理器bean,而后者将按计划执行已注册的bean。

我希望bean只需要实现一个接口,并通过一些弹簧机制注册到作业处理器bean。或者将作业处理器bean注入bean中,然后以某种方式,作业处理器bean可以跟踪注入的位置。

任何建议都表示赞赏,可能春天不是这类工具的工具吗?

2 个答案:

答案 0 :(得分:1)

使用类似这样的弹簧上下文:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!--Scans the classpath for annotated 
         components @Component, @Repository, 
         @Service, and @Controller -->

    <context:component-scan base-package="org.foo.bar"/>


    <!--Activates @Required, @Autowired, 
        @PostConstruct, @PreDestroy 
         and @Resource-->
    <context:annotation-config/>
</beans>

定义一个像这样的pojo:

@Component
public class FooBar {}

像这样注入:

@Component
public class Baz {
    @Autowired private FooBar fooBar;
}

答案 1 :(得分:0)

Spring为Task Execution and Scheduling提供了强大的抽象层。

在Spring 3中,还有一些注释可用于按计划标记bean方法(参见Annotation Support for Scheduling and Asynchronous Execution

您可以让方法在固定的时间间隔内执行:

@Scheduled(fixedRate=5000)
public void doSomething() {
    // something that should execute periodically
}

或者您可以添加CRON样式的表达式:

@Scheduled(cron="*/5 * * * * MON-FRI")
public void doSomething() {
    // something that should execute on weekdays only
}

以下是您需要添加的XML代码(或类似内容):

<task:annotation-driven executor="myExecutor" scheduler="myScheduler"/>
<task:executor id="myExecutor" pool-size="5"/>
<task:scheduler id="myScheduler" pool-size="10"/>

一起使用
<context:component-scan base-package="org.foo.bar"/>
<context:annotation-config/>

as described by PaulMcKenzie,这应该可以让你到达目的地。