使用 Spring Boot 推送通知
Posted
技术标签:
【中文标题】使用 Spring Boot 推送通知【英文标题】:Push notifications using Spring Boot 【发布时间】:2021-03-01 23:29:44 【问题描述】:希望大家多多指教。
我有一个 Spring Boot API 和一个移动应用程序。我必须在用户必须做某事之前一小时向他们发送推送通知,比如提醒。我在数据库中存储了特定的日期和时间。
我一直在阅读计划任务,但我一点也不喜欢。
那么,您认为最好的方法是什么?
【问题讨论】:
【参考方案1】:我一直在阅读计划任务,但我一点也不喜欢。
它还应该如何工作?您需要某种在指定时间触发您的代码的调度程序/计时器。
你可以选择我想到的最简单的解决方案:
long delay = ...; // calculate the delay when the code should be executed
Runnable theCodeToExecute = () -> System.out.println("hello world");
new Thread(() ->
try
Thread.sleep(delay);
runnable.run();
catch (Exception e)
System.err.println(e);
).start();
这当然有几个缺点:当你重新启动你的应用程序时,计划任务就消失了。当你有数百个线程处于休眠状态时,它不会很有效。
当然有办法绕过这个:
将您的计时器存储在数据库(或文件)中。并在您发送通知时删除条目。当您的应用程序重新启动时,您只需读取存储的条目并重新启动计时器。
您可以使用任务队列(或排序列表)。并且有一个线程,每 N 秒查找一次队列中的下一个任务。如果此任务已准备就绪,请将其从队列(或列表)中移除并执行代码。
作为替代方案,您当然可以使用已经为您完成所有这些工作的框架,例如 Quartz
【讨论】:
以上是关于使用 Spring Boot 推送通知的主要内容,如果未能解决你的问题,请参考以下文章
使用 Spring Boot 和 React Native 的提醒推送通知
从 Spring Boot 到 ionic 的 webSocket 推送通知