Многопоточность, вызывающая проблемы с ведением журнала планировщика SpringJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Многопоточность, вызывающая проблемы с ведением журнала планировщика Spring

Сообщение Anonymous »

Я использую планировщик Spring, и мне необходимо распечатывать журнал внутри планировщика Spring каждую минуту. Ниже приведен код и конфигурация планировщика Spring.

Код: Выделить всё

@Slf4j
@EnableScheduling
@Component
@RequiredArgsConstructor
public class EventConsumer {

private AtomicReference lastLoggedTime = new AtomicReference(LocalDateTime.now());;

public LocalDateTime getLastLoggedTime() {
return lastLoggedTime.get();
}

public void setLastLoggedTime(LocalDateTime lastLoggedTime) {
if(lastLoggedTime.isAfter(this.lastLoggedTime.get())) {
this.lastLoggedTime.set(lastLoggedTime);
}
else{
log.info("Time trying to update is in past EventConsumer");
}
}

@Scheduled(initialDelay = 5, fixedDelayString = "30000")
public void pollAxonMessages() {

LocalDateTime currentTime = LocalDateTime.now();
if (isLogginEnabled(getLastLoggedTime(),60,currentTime,"Event Consumer")) {
log.info("Started polling ");
setLastLoggedTime(currentTime);
}
}

public boolean isLogginEnabled(LocalDateTime lastLoggedInTime,
Integer loggingInterval,
LocalDateTime currentDateTime,
String consumerName){
log.info("LocalDateTime : {} , loggingInterval : {} , currentDateTime :{} consumerName: {}", lastLoggedInTime, loggingInterval, currentDateTime, consumerName);
return lastLoggedInTime.plusSeconds(loggingInterval).isBefore(currentDateTime);
}

}
Конфигурация файла YAML для планировщика Spring.

Код: Выделить всё

spring:
task:
scheduling:
pool:
size: 8
Я использую Spring Boot версии 2.4.1 и развертываю приложение в PCF Cloud Foundry. Проблема в том, что я вижу потоки планирования-2 и планирования-4, работающие внутри потребителя событий, и когда один из потоков (планирование-2) обновляет LastLoggedTime, другой все еще не получает обновление и использует старый LastLoggedTime. значение, из-за которого один и тот же оператор печатается дважды за 60 секунд, а не один раз.
Можете ли вы сообщить мне, что я пропустил в приведенном выше коде, что привело к этой проблеме?

Подробнее здесь: https://stackoverflow.com/questions/790 ... er-logging
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»