Задать вопрос
whereeaglesdare
@whereeaglesdare

Какие аннотации использовать в Spring для перезагрузки приложения?

Добрый день. Подскажите пожалуйста, все ли я делаю правильно
Задача - инциализировать все боты телеграма при инициализации компонента и закончить все сессии при выключении приложения.

import io.secret.support.channel.AddonApplication;
import io.secret.support.channel.bot.TelegramBot;
import io.secret.support.channel.dao.ProjectBotRepository;
import io.secret.support.channel.entity.BotProject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.telegram.telegrambots.ApiContextInitializer;
import org.telegram.telegrambots.meta.TelegramBotsApi;
import org.telegram.telegrambots.meta.exceptions.TelegramApiRequestException;
import org.telegram.telegrambots.meta.generics.BotSession;


import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.util.ArrayList;
import java.util.List;

@Component
public class TelegramBotsAutoConfiguration {
    private static final Logger log = LoggerFactory.getLogger(TelegramBotsAutoConfiguration.class);

    private ProjectBotRepository projectBotRepository;

    private List<BotSession> sessions = new ArrayList<>();

    static {
        ApiContextInitializer.init();
    }

    @Autowired
    public TelegramBotsAutoConfiguration(ProjectBotRepository projectBotRepository) {
        log.info("Initialization of TelegramBotsAutoConfiguration");
        this.projectBotRepository = projectBotRepository;
    }

    @PostConstruct
    public void init() throws TelegramApiRequestException {
        TelegramBotsApi telegramBotsApi = new TelegramBotsApi();
        for(BotProject botProject: projectBotRepository.findAll()) {
            log.info("Bot ", botProject.getBotToken());
            telegramBotsApi.registerBot(new TelegramBot(botProject.getBotToken()));
        }
    }

    @PreDestroy
    public void stop() {
        sessions.forEach(session -> {
            if (session != null) {
                session.stop();
            }
        });
    }
}


Проблема: при повторной сборке проекта после запуска mvn spring-boot:run вылезают исключения

org.telegram.telegrambots.meta.exceptions.TelegramApiRequestException: Error getting updates
        at org.telegram.telegrambots.meta.api.methods.updates.GetUpdates.deserializeResponse(GetUpdates.java:118) ~[telegrambots-meta-4.6.jar:na]
        at org.telegram.telegrambots.updatesreceivers.DefaultBotSession$ReaderThread.getUpdatesFromServer(DefaultBotSession.java:263) ~[telegrambots-4.6.jar:na]
        at org.telegram.telegrambots.updatesreceivers.DefaultBotSession$ReaderThread.run(DefaultBotSession.java:194) ~[telegrambots-4.6.jar:na]

Я предполагаю, что это из-за незакрытых сессий.
Есть ли какой-то лиснер или аннотация позволяющая закрывать сессии при релоаде приложения?

Заранее прошу прощения, если что-то из моей терминологии не ясно. Только начинаю работать со спрингом.
  • Вопрос задан
  • 137 просмотров
Подписаться 2 Простой 2 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы