我是Spring的新手,我正在尝试定期在后台运行一系列@Scheduled方法。
我有一个抽象类:
abstract class AbstractTaskClass {
@Autowired
private SomeClass someInst;
@Scheduled(fixedDelay=10000)
protected abstract void execute();
protected SomeClass getSomeInst() {
return someInst;
}
}
以及多个具体类,例如:
@Component
public class ConcreteTaskClass extends AbstractTaskClass {
@Override
protected void execute() {
// do stuff ...
}
}
我的应用程序配置类:
@Configuration
@EnableScheduling
@ComponentScan(basePackages="com.foo.tasks")
public class ApplicationConfig {
}
其中com.foo.tasks包含上面的抽象类和所有具体的实现类。
Spring似乎没有在所有具体类上执行我的预定方法。我在这里忽略了什么?我想,既然我是Spring的新手,我可能会遗漏一些关于框架和IoC容器如何工作的基本信息。
谢谢!
答案 0 :(得分:1)
根据我上面的评论,我建议的格式稍微好一些。我没有对此进行测试,因此可能需要一些实验才能使其正常工作,但是......
public interface Task {
void execute();
}
@Component // Not certain if this is the right annotation...
public class BaseTaskClass {
@Autowired
private List<Task> someTasks;
@Scheduled(fixedDelay=10000)
public void execute() {
for (task : someTasks) {
task.execute();
}
}
}
@Component
public class ConcreteTaskClass implements Task {
@Override
public void execute() {
// do stuff ...
}
}