Я пытаюсь использовать EventListener для обработки данных, созданных другим компонентом. Все работает нормально при первом запуске события, но затем EventListener удаляется из списка слушателей.
Вот соответствующая часть слушателя:
@Component
public class Listener implements ApplicationListener<CustomEvent> {
@Override
public void onApplicationEvent(CustomEvent event) {
//do stuff
}
}
И вот Важные части издателя:
@Component
public class Publisher {
@Autowired
private ApplicationEventPublisher applicationEventPublisher;
public void start() {
try {
ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();
exec.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
CustomEvent event = new CustomEvent(this, getUpdates());
applicationEventPublisher.publishEvent(event);
}, 0, interval, TimeUnit.SECONDS);
} catch (Exception e) {
System.exit(1);
}
}
}
И класс CustomEvent:
public class CustomEvent extends ApplicationEvent {
private List<Update> updates = new ArrayList<>();
public CustomEvent (Object source, List<Update> updateList) {
super(source);
updates = updateList;
}
public List<Update> getUpdates() {
return updates;
}
}
Исходя из того, что я могу сказать из отладчика, создается впечатление, что bean-компонент Listener уничтожается, когда я не не ожидаю этого. Любая идея, как держать это, чтобы слушать события после первого?