Spring MVC声明使用@Scheduled的bean

15 浏览
0 Comments

Spring MVC声明使用@Scheduled的bean

这个问题已经在这里有了答案:

Spring beans是什么?

我试图让一个类周期性地从rest api请求数据,检查我数据库中的数据是否仍然是最新的。

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

这一切都能工作,但我不完全理解容器中任何Spring管理的bean是什么意思。现在我在配置类中像这样声明了bean(类CapsuleRestApi是负责从api请求数据的类)

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

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

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

有没有其他方法可以使其工作,而不必将方法添加为bean?我不完全理解为什么使用bean方法会起作用。

admin 更改状态以发布 2023年5月21日
0
0 Comments

容器中任何一个Spring管理的Bean都是什么意思。

这意味着,Spring在启动时应该知道这个类。
如果在Spring启动期间spring没有扫描的类的方法上放置了@Scheduled,则此注释没有任何意义。

例如。考虑一个像这样的类

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

你会发现这个被调度的方法从来没有被执行过。因为,Spring容器不知道这个类。这是因为它没有被扫描到。这是因为它不是Spring Bean。

现在在类上添加@ComponentService。这将使类成为Spring Bean并起作用。

当你使用@Bean时,这意味着你正在声明一个Bean。因此它起作用。

希望这很清楚。

0