首页 > 解决方案 > 如何使用 Spring Boot AutoWired 和 ScheduledExecutorService?

问题描述

我需要在多个类中使用带有 ScheduledExecutorService 的 autowired,我尝试过的内容显示在此代码中。下面示例中用户列表的日志记录大小始终显示为 0,即使在用户添加到 arraylist 之后也是如此。如何在 Spring Boot 中正确使用 Autowired 和 ScheduledExecutorService?

@Component
public class AnotherClass {
    List<User> users = new ArrayList();

    public void addUser(User user){
        users.add(user);
    }

    public void logUsers(){
        logger.info("User size " + users.size());  <================= Always logs 0, when called from executor
    }

}

@RestController
public class SecondClass {

    @Autowired
    private AnotherClass anotherClass; 

    @GetMapping(value="/user/test")
    public void logUsers(){
        anotherClass.addUser(new User());
    }
}

应用类

@Component
@SpringBootApplication
public class SpringBootDemoApplication {

    private ScheduledExecutorService exec = Executors.newScheduledThreadPool(1);

    @Autowired
    private AnotherClass anotherClass; 

    @PostConstruct
    public void init() {
        logger();
    }

    public static void main(String[] args) {
        SpringApplication.run(SpringBootDemoApplication.class, args);
    }

    public void logger(){
        exec.scheduleAtFixedRate(new Runnable(){
            @Override
            public void run(){
                try {
                    anotherClass.logUsers();
                }catch (Exception e){
                }
            }
        }, 2000, 1000, TimeUnit.MILLISECONDS);
    }
}

标签: spring-boot

解决方案


如果您使用Spring @Autowired而不是@AutoWiredAnnotation,则该代码有效。


推荐阅读