Как использовать Spring boot AutoWired и ScheduledExecutorService? - PullRequest
0 голосов
/ 18 марта 2020

Мне нужно использовать autowired более чем в одном классе с ScheduledExecutorService, то, что я пробовал, показано в этом коде. размер журнала списка пользователей в приведенном ниже примере всегда показывает 0, даже после добавления пользователя в массив. Как правильно использовать 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);
    }
}

1 Ответ

0 голосов
/ 18 марта 2020

Код работает, если вы используете Spring @Autowired, а не @AutoWired Аннотация.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...