Реализация фоновой службы, которая отправляет напоминания на основе времени напоминания и аутентификации пользователя с использованием механизма на основе токенов. - PullRequest
0 голосов
/ 24 июня 2018

Я довольно новичок в Spring Boot и работаю над созданием для себя мини-приложения, которое сможет реализовать сервис, который предоставляет набор API для управления набором календарей для разных пользователей. Я использую STS IDE для этого проекта и выбрал Apache Derby, JPA и веб-зависимости для того же. Я создал два класса Entity для CalanderEvents и CalanderUser и базовую операцию CRUD для них обоих.

У меня два вопроса:

1) Я использую приложение Postman для реализации операций CRUD и просто не могу понять, как получить время собрания для мастера постов в STS, чтобы я мог создать фоновое приложение, которое отправляет напоминание за 30 минут до времени собрания. Будет ли @Async работать здесь?

2) Я думаю, что для аутентификации на основе пользователя JWT справится, но мне нужен графический интерфейс для реализации аутентификации на основе токенов или я могу сделать это через почтальона?

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

Спасибо.

1 Ответ

0 голосов
/ 24 июня 2018

Малая точность - вы не используете Postman для реализации CRUD; вы используете Postman для проверки своей реализации.

  1. @Async используется для разрешения выполнения методов в асинхронном режиме (другими словами, несколько методов могут выполняться одновременно). То, что вы ищете, вероятно, @Scheduled.

@Scheduled позволяет планировать задачу каждые X раз - в вашем случае, чтобы запланировать выполнение метода, вы должны сделать что-то подобное:

@Scheduled(fixedRate = 1800000)
public void sendMessagePeriodically() {
    // ...
}

(1000 мс * 60 * 30 = 1800000 мс = 30 мин)

Чтобы вышеперечисленное сработало, вы можете аннотировать класс конфигурации с помощью @EnableScheduling:

@Configuration
@EnableScheduling
public class SchedulingConfiguration {

}

В качестве альтернативы вы можете добавить @EnableScheduling поверх вашего основного класса (тот, у которого @SpringBootApplication)

  1. Нет, вам не нужен графический интерфейс. Все, что вам нужно сделать, это внедрить систему аутентификации либо с помощью Spring Security (которая значительно облегчит вашу работу), либо с помощью контроллера. Затем вы можете просто связаться с этим API с помощью Postman, чтобы идентифицировать себя.

Удачи.


Обновление

Например, вы можете запланировать задачу, которая запускается каждую минуту, и проверять, запланированы ли какие-либо события через 30 минут. Если есть, то отправьте уведомление:

@Scheduled(fixedRate = 60000)
public void checkForUpcomingEvents() {
    // get all events scheduled in ~30 minutes
    List<Event> events = getEventsScheduledSoon(); 
    for (Event event : events) { // for each event
        event.notifyUsers(); // notify all users concerned
    }
}

Обратите внимание, что важно, чтобы вы получили все события, которые имеют событие в приблизительно через 30 минут (например, между 29 - 31), потому что, хотя вы можете полагаться на @Scheduled для выполнения, вам все равно нужно рассмотреть возможные задержки. Следуя этой логике, вы также должны убедиться, что вы не уведомляете одно и то же лицо дважды об одном и том же событии.

Есть несколько переменных, которые нужно учитывать, например, сколько времени занимает получение событий? Сколько времени занимает уведомление пользователей? В зависимости от этих переменных вам может потребоваться изменить конфигурацию (например, запускать каждые 5 минут вместо 1 минуты).

Есть действительно много способов сделать это, ваше решение использовать java ExecutorService также превосходно, но, поскольку вы пометили свой вопрос с помощью spring-boot, а не java, я выбрал @Scheduled подход.

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