代码之家  ›  专栏  ›  技术社区  ›  DreamsInHD

Spring MVC声明bean使用@Scheduled[重复]

  •  0
  • DreamsInHD  · 技术社区  · 8 年前

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

    文档中说,要启用计划,我应该添加 @EnableScheduling 注释,然后我将能够使用 @Scheduled 容器中任何spring管理bean上的注释。

    这一切都可行,但我不完全明白 容器中任何spring管理的bean 方法现在,我在configuration类(类 CapsuleRestApi 是负责从api请求数据的类)

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

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

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

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

    1 回复  |  直到 8 年前
        1
  •  1
  •   pvpkiran    8 年前

    容器中任何spring管理的bean都意味着什么。

    这意味着,spring应该在这个类开始时就知道它。 如果你把 @Scheduled 对于spring在启动期间不扫描的类中的方法,此注释没有任何意义。

    例如假设你有这样一门课

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

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

    现在添加 @Component Service 在课堂上。这将使类成为Springbean,并且它将工作。

    当你这样做的时候 @Bean 这意味着,您正在声明一个bean。因此它是有效的。

    希望这是清楚的