Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Spring Boot自动更新监控网站_Java_Spring Boot - Fatal编程技术网

Java 使用Spring Boot自动更新监控网站

Java 使用Spring Boot自动更新监控网站,java,spring-boot,Java,Spring Boot,我有一个Java应用程序,我开始使用SpringBoot,并添加了一个.jsp文件,提供了一个网站来监控应用程序的状态 当应用程序更改其状态时,是否有可能自动更新网站?目前,我必须按F5或使用自动刷新插件。然而,我的印象是,应该有一些技术可以做到这一点,而无需每隔几秒钟重新加载整个网站 我甚至不知道用谷歌搜索什么,所以任何提示都会非常有用。从spring boot 1.3开始,有一个新工具spring devtools Chrome、Firefox和Safari都有免费的浏览器扩展。我继续搜索

我有一个Java应用程序,我开始使用SpringBoot,并添加了一个.jsp文件,提供了一个网站来监控应用程序的状态

当应用程序更改其状态时,是否有可能自动更新网站?目前,我必须按F5或使用自动刷新插件。然而,我的印象是,应该有一些技术可以做到这一点,而无需每隔几秒钟重新加载整个网站


我甚至不知道用谷歌搜索什么,所以任何提示都会非常有用。

从spring boot 1.3开始,有一个新工具spring devtools


Chrome、Firefox和Safari都有免费的浏览器扩展。我继续搜索并找到了解决方案。在HTML5中引入了SSE,它允许将数据从服务器发送回当前查看网站的任何客户端。然后可以使用一些JavaScript相应地更新网站

在Spring Boot中使用SSE非常简单:

@控制器
必须存储
发射器的列表
,并向每个发射器发送任何更新的数据。另外,还需要另一个请求映射来允许客户端注册自己

private final List<SseEmitter> sseEmitter = new LinkedList<>();

@RequestMapping (path = "/register", method = RequestMethod.GET)
public SseEmitter register() throws IOException {
    log.info("Registering a stream.");

    SseEmitter emitter = new SseEmitter();

    synchronized (sseEmitter) {
        sseEmitter.add(emitter);
    }
    emitter.onCompletion(() -> sseEmitter.remove(emitter));

    return emitter;
}
@控制器可以通过向所有已知发射器发送数据来请求更新:

synchronized (sseEmitter) {
    sseEmitter.forEach((SseEmitter emitter) -> {
        try {
            emitter.send(state, MediaType.APPLICATION_JSON);
        } catch (IOException e) {
            emitter.complete();
            sseEmitter.remove(emitter);
        }
    });
}
最后,网站接受消息并进行处理。还必须将以下内容添加到
connect()
函数中:

source.addEventListener('message', function (e) {
    var state = JSON.parse(e.data);
    console.log("New state: " + state.text);
    var element = document.getElementById("state");
    element.innerHTML = state.text;
}, false);

我已将一个简单的示例项目上载到。

High-kap。这不是真正的java或spring引导特定的。问题是当你说“改变它的状态”时,你会期望什么。也就是说,当你想把一些信息从你的应用程序推送到客户端时,我建议你看看WebSocket。如果你的意思是你想通知你的用户应用程序崩溃了或者什么的,那么我认为这是不可能的。崩溃的应用程序应如何通知用户?为此,您需要实现其他一些功能。更改状态意味着“为同一端点返回不同的内容”。我在寻找一种长轮询的主动变体。当更新仅在几分钟后发生时,实际上不需要每隔
x
秒检查更新状态。请改用WebSocket
source.addEventListener('message', function (e) {
    var state = JSON.parse(e.data);
    console.log("New state: " + state.text);
    var element = document.getElementById("state");
    element.innerHTML = state.text;
}, false);