在Java后台系统中,构建系统公告推送功能通常包含公告数据存储、推送通道选择和客户端接收三个核心部分。合理的结构能让公告实时触达用户,也方便后续维护与扩展。

一、公告推送的整体结构
一个典型的Java系统公告推送结构可以分为三层:
- 存储层:使用关系型数据库保存公告内容、发布时间、接收范围等字段。
- 推送层:通过WebSocket长连接实时下发,或借助消息队列解耦发送逻辑。
- 展示层:前端轮询或监听通道获取公告并渲染。
二、公告数据表设计
公告表建议包含以下核心字段,便于后续按条件筛选推送:
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | bigint | 主键 |
| title | varchar | 公告标题 |
| content | text | 公告正文 |
| status | tinyint | 0草稿 1已发布 |
| create_time | datetime | 创建时间 |
三、基于WebSocket的实时推送示例
在Spring Boot中,可以使用WebSocket向在线用户推送公告。下面代码展示了一个简单的推送逻辑:
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Service;
@Service
public class AnnouncementPushService {
private final SimpMessagingTemplate messagingTemplate;
public AnnouncementPushService(SimpMessagingTemplate messagingTemplate) {
this.messagingTemplate = messagingTemplate;
}
// 向所有订阅 /topic/announcement 的客户端推送公告
public void pushToAll(String title, String content) {
AnnouncementMsg msg = new AnnouncementMsg(title, content);
messagingTemplate.convertAndSend("/topic/announcement", msg);
}
static class AnnouncementMsg {
private String title;
private String content;
public AnnouncementMsg(String title, String content) {
this.title = title;
this.content = content;
}
public String getTitle() { return title; }
public String getContent() { return content; }
}
}
四、使用定时任务补偿拉取
对于未建立长连接的客户端,可通过定时任务查询最新公告:
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class AnnouncementSchedule {
// 每30秒检查一次已发布公告
@Scheduled(fixedDelay = 30000)
public void checkNewAnnouncement() {
// 调用公告服务查询status=1且未推送的记录
System.out.println("执行公告拉取检查");
}
}
五、结构解析小结
公告推送结构的核心在于存储与推送解耦。使用数据库保证数据可靠,WebSocket提升实时性,定时任务作为补偿手段。实际项目中可结合消息队列进一步降低耦合,提升系统公告推送的稳定性和扩展性。