实现一个后台服务,该服务使用基于令牌的机制根据提醒时间和用户身份验证发送提醒



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

我有两个问题:

1(我正在使用邮递员应用程序来实现 CRUD 操作,只是无法弄清楚如何在 STS 中获取邮政母版的会议时间,以便我可以创建一个在会议时间前 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注释配置类:

@Configuration
@EnableScheduling
public class SchedulingConfiguration {
}

或者,您可以在主类(带有@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 分钟(。

真的有很多方法可以解决这个问题,你使用 javaExecutorService的解决方案也是一个很好的解决方案,但是由于你用spring-boot而不是java标记了你的问题,我选择了@Scheduled的方法。

最新更新