You need to enable JavaScript to run this app. 如何在STS新建的Java独立项目中实现推送通知功能?
优惠活动
大模型
产品
解决方案
定价
更多

如何在STS新建的Java独立项目中实现推送通知功能?

普通Java项目推送通知实现说明

普通Java项目完全可以实现推送通知功能,Spring Boot相关实现方案只是对核心依赖做了自动配置封装,底层的实现逻辑和依赖本身可以直接在无Spring的普通Java项目中使用。

前置依赖(以WebSocket推送场景为例,使用JSR356标准的Tyrus实现)

如果使用Maven管理依赖,在pom.xml中添加如下配置:

<dependencies>
    <!-- JSR356 WebSocket API -->
    <dependency>
        <groupId>javax.websocket</groupId>
        <artifactId>javax.websocket-api</artifactId>
        <version>1.1</version>
    </dependency>
    <!-- Tyrus 服务端实现,无Spring依赖 -->
    <dependency>
        <groupId>org.glassfish.tyrus</groupId>
        <artifactId>tyrus-server</artifactId>
        <version>1.19</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.tyrus</groupId>
        <artifactId>tyrus-container-grizzly-server</artifactId>
        <version>1.19</version>
    </dependency>
</dependencies>

示例代码

场景1:WebSocket服务端主动向客户端推送消息

1. 定义WebSocket服务端点

import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;

@ServerEndpoint("/push")
public class PushServerEndpoint {
    // 存储所有连接的客户端会话
    private static final Set<Session> sessions = new CopyOnWriteArraySet<>();

    @OnOpen
    public void onOpen(Session session) {
        sessions.add(session);
        System.out.println("新客户端连接,当前连接数:" + sessions.size());
    }

    @OnClose
    public void onClose(Session session) {
        sessions.remove(session);
        System.out.println("客户端断开连接,当前连接数:" + sessions.size());
    }

    @OnMessage
    public void onMessage(String message, Session session) {
        System.out.println("收到客户端消息:" + message);
    }

    // 向所有连接的客户端推送消息
    public static void pushToAll(String message) {
        for (Session session : sessions) {
            try {
                session.getBasicRemote().sendText(message);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

2. 启动WebSocket服务

import org.glassfish.tyrus.server.Server;

public class WebSocketServerStarter {
    public static void main(String[] args) {
        // 启动服务,监听8080端口,根路径为/ws,注册的端点类为PushServerEndpoint
        Server server = new Server("localhost", 8080, "/ws", null, PushServerEndpoint.class);
        try {
            server.start();
            System.out.println("WebSocket服务启动成功,访问地址:ws://localhost:8080/ws/push");
            
            // 模拟5秒后主动推送一条消息
            Thread.sleep(5000);
            PushServerEndpoint.pushToAll("服务端主动推送的测试消息");
            
            // 保持服务运行
            Thread.currentThread().join();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            server.stop();
        }
    }
}

场景2:通过HTTP请求向第三方平台/移动端推送通知

无需额外依赖,直接使用JDK自带的HttpURLConnection实现:

import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;

public class HttpPushDemo {
    public static void main(String[] args) {
        try {
            // 第三方推送接口地址
            URL url = new URL("https://your-push-provider.com/api/send");
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setDoOutput(true);

            // 推送请求参数
            String jsonBody = "{\"title\":\"通知标题\",\"content\":\"通知内容\",\"targetUserId\":\"12345\"}";
            try (OutputStream os = conn.getOutputStream()) {
                byte[] input = jsonBody.getBytes(StandardCharsets.UTF_8);
                os.write(input, 0, input.length);
            }

            int responseCode = conn.getResponseCode();
            System.out.println("推送请求响应码:" + responseCode);
            conn.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

注意事项

  • 如果需要对接苹果APNs、华为推送、小米推送等厂商通道,直接引入对应厂商的官方Java SDK即可,所有官方SDK均支持在普通Java项目中运行,无Spring强制依赖
  • 消息重试、持久化、批量推送等业务逻辑可根据需求自行实现,和项目是否使用Spring无关

内容的提问来源于stack exchange,提问作者Jeevan Horeb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 07:09:03