Spring запланированное задание и вызов BlockingQueue.take () - PullRequest
0 голосов
/ 05 июня 2019

У меня есть 2 задачи с использованием аннотации Spring @Scheduled

@Scheduled(initialDelay = 5000, fixedDelay = 15000)
    public void diffuserProchainADiscuter() {
    helper.waitAndFusionne(aTraiter);
    // some other stuff
}

и

@Scheduled(initialDelay = 14, fixedRate = 30)
    public void diffuserAmdtsEtTextes() {
    // more stuff
}

В классе Helper у меня есть вызываемый метод, который содержит:

private static BlockingQueue<InfoVote> infosDernierVote = new LinkedBlockingQueue<InfoVote>();

public static void waitAndDrainInfoDernierVote(Collection<InfoVote> infoVotes) throws InterruptedException{
        //noinspection EmptyCatchBlock
        if (infoVotes.size() == 0) infoVotes.add(infosDernierVote.take());
        infosDernierVote.drainTo(infoVotes);
}

Код работает на сервере Tomcat 7 в CentOS.

Когда я запускаю сервер, diffuserProchainADiscuter () выполняется один раз, а затем diffuserAmdtsEtTextes () запускается и никогда не возвращается, потому что infosDernierVote пусто, поэтому задача ожидает вставки некоторых данных в BlockingQueue. Странное поведение в том, что другое запланированное задание не выполняется снова, и я не понимаю, почему. Когда я комментирую helper.waitAndFusionne(aTraiter);, другая задача выполняется нормально каждый раз, когда она должна. Чего мне не хватает?

...