我正在寻找一种方法让spring bean将自己注册到一个作业处理器bean,而后者将按计划执行已注册的bean。
我希望bean只需要实现一个接口,并通过一些弹簧机制注册到作业处理器bean。或者将作业处理器bean注入bean中,然后以某种方式,作业处理器bean可以跟踪注入的位置。
任何建议都表示赞赏,可能春天不是这类工具的工具吗?
答案 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,这应该可以让你到达目的地。