Spring - 未运行的具体类中的@scheduled方法

时间:2015-12-10 15:47:33

标签: java spring task inversion-of-control scheduling

我是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容器如何工作的基本信息。

谢谢!

1 个答案:

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