Spring MVC声明bean使用@Scheduled

时间:2018-03-17 20:34:11

标签: java spring spring-mvc

我正在尝试让一个类定期从rest api请求数据,以检查我的数据库中的数据是否仍然是最新的。

文档说要启用调度我应该将@EnableScheduling注释添加到配置类中,然后我就可以在容器中的任何spring托管bean上使用@Scheduled注释。

一切正常,但我不完全理解容器中的任何弹簧管理bean 意味着什么。现在我在配置类中声明了这样的bean(类CapsuleRestApi是负责从api请求数据的类)

@Bean
public CapsuleRestApi capsuleDatabaseJpa() {
    return new CapsuleRestApi();
}

然后我在CapsuleRestApi类中使用了这个方法

@Scheduled(fixedDelay = 2000)
public void refresh() {
    // refresh and check changes
}

有没有其他方法可以让它工作而不添加方法作为bean?我不完全理解为什么它适用于bean方法。

1 个答案:

答案 0 :(得分:1)

  

容器中任何弹簧托管bean的含义。

这意味着,Spring应该在启动时了解这个类。 如果你把@Scheduled放在一个弹簧在启动过程中没有扫描的类的方法中,这个注释没有任何意义。

例如。考虑你有这样的课程

class NotManagedBean {

   @Scheduled
   public void scheduler() {
      .....
   }
}

您将看到此计划方法永远不会执行。因为,Spring容器并不了解这个类。那是因为没有扫描。这是因为它不是一个春天豆。

现在在课堂上添加@ComponentService。这将使该类成为一个spring bean,它将起作用。

当你执行@Bean这意味着,你宣布一个bean。因此它有效。

希望很清楚