关于java:Spring MVC声明bean使用@Scheduled

Spring MVC Declaring bean to use @Scheduled

本问题已经有最佳答案,请猛点这里访问。

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

文档指出,为了启用调度,我应该将@EnableScheduling注释添加到配置类中,然后我将能够在容器中的任何Spring管理bean上使用@Scheduled注释。

这一切都有效,但我不完全理解容器中任何Spring管理的bean的含义。现在我在配置类中这样声明bean(类CapsuleRestApi负责从API请求数据)

1
2
3
4
@Bean
public CapsuleRestApi capsuleDatabaseJpa() {
    return new CapsuleRestApi();
}

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

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

有没有另一种方法可以使它在不将方法作为bean添加的情况下工作?我不完全理解为什么它与bean方法一起工作。


what any spring managed bean in the container means.

这意味着,Spring应该在课程开始时就知道这门课。如果您将@Scheduled放在类中的某个方法上,而Spring在启动期间不扫描该类,那么这个注释就没有任何意义。

例如。你有这样的课吗?

1
2
3
4
5
6
7
class NotManagedBean {

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

您将看到此计划方法从未执行。因为,Spring容器不知道这个类。那是因为它没有被扫描。这是应该做的事实,它不是一个春豆。

现在在类上加上@ComponentService。这将使类成为一个SpringBean,并且它将工作。

当你这么做的时候,意味着你要申报一个豆子。因此它起作用了。

希望这是清楚的