实现后台服务,根据提醒时间和用户身份验证使用 token-based 机制发出提醒。

Implementing a background service that sends out reminders based on the reminder time and user authentication using a token-based mechanism.

我是 Spring Boot 的新手,正在为自己开发一个迷你应用程序,它将能够实现一项服务,该服务提供一组 API 来管理不同用户的一组日历。 我为此项目使用 STS IDE,并为此选择了 Apache Derby、JPA 和 Web 依赖项。我为 CalanderEvents 和 CalanderUser 创建了两个实体 class,并为它们创建了基本的 CRUD 操作。

我有两个问题:

1) 我正在使用 Postman 应用程序来实现 CRUD 操作,只是想不出如何在 STS 中获取 Post master 的会议时间,以便我可以创建一个后台应用程序来发送会议时间前 30 分钟提醒。 @Async 会在这里工作吗?

2) 对于基于用户的身份验证,我认为 JWT 可以完成这项工作,但是我需要一个 GUI 来实现基于令牌的身份验证,还是可以通过邮递员来完成?

我不确定我是否能够清楚地提出我的查询,如果您认为我需要添加更多信息,请告诉我。

谢谢。

小精度 -- 您没有使用 Postman 来实现 CRUD;您正在使用 Postman 来测试您的实施。

  1. @Async用于允许方法以异步方式执行(换句话说,多个方法可以同时运行)。您要查找的可能是 @Scheduled.

@Scheduled 允许您每隔 X 时间安排一个任务——在您的情况下,要安排一个方法的执行,您会做类似的事情:

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

(1000ms * 60 * 30 = 1800000ms = 30min)

为了使上述工作正常,您可以使用 @EnableScheduling:

注释配置 class
@Configuration
@EnableScheduling
public class SchedulingConfiguration {

}

或者,您可以在主 class(带有 @SpringBootApplication 的那个)

之上添加 @EnableScheduling
  1. 不,您不需要 GUI。您需要做的就是使用 Spring 安全性(这将使您的工作更轻松)或使用控制器来实施身份验证系统。然后,您可以简单地使用 Postman 与 API 通信以验证您自己的身份。

祝你好运。


更新

例如,您可以安排每分钟 运行 的任务,并检查 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 的解决方案也是一个很好的解决方案,但是您已经用 [=20 标记了您的问题=] 而不是 java,我选择了 @Scheduled 方法。