Spring Boot - 定时控制器

时间:2018-02-02 10:36:53

标签: spring spring-mvc thymeleaf

我有以下Spring Boot Web应用程序,并使用Tomcat作为服务器,使用Thymeleaf作为我的html模板。关于我的第一个Spring Boot项目,我有两个问题。

这是我的代码到目前为止的样子:

@RequestMapping(value = "/myIpAdress")
private String displayMyIpAdress(HttpServletRequest request, Model model) throws Exception
{
    model.addAttribute("myIpAdress", getMyIpAdress());
    return "myIpAdress";
}

private String getMyIpAdress()
{
    // here is a simple HTTP Request returning my IP Adress from a server
}

这是myIpAdress.html

<div th:text="${myIpAdress}"></div>

它只是在我的视图中显示我的IP地址,效果很好。到目前为止没什么好看的。

第一个问题: 如何设置计时器,以便在我的html文件上每秒显示一次IP?一旦我的IP发生变化,我希望在我的视图中立即进行更改。在Java中,我只需执行一个预定的计时器或使用Thread.sleep(1000L)进行一段时间(真实)循环:

public static void main(String[] args) throws Exception
{
    while(true){
        System.out.println("My IP is: "+getMyIpAdress());
        Thread.sleep(1000L);
    }
}

这个Java代码非常快速地运行。控制台几乎每秒都会显示我的IP地址。这正是我最初想要的。但现在我想用它制作一个Spring Boot Web App,速度非常慢,请求需要15秒才能生成请求并呈现视图。

所以我的第二个问题是,为什么这么慢?我怎样才能提高速度?我没有在HTML文件上运行任何CSS或JavaScript,它实际上只显示我的IP地址。

我想要的只是从服务器获取IP并将其显示在我的视图中。每一秒。我该怎么做?

1 个答案:

答案 0 :(得分:0)

在纯Thymeleaf中,每次在后端发生更改时,您都无法更新静态视图,而无需从客户端发送新请求。它仅以一种方式工作 - 请求是从客户端到服务器,而不是相反。

实现您想要做的最简单的方法是向模板添加一个简单的javascript,每秒获取一次IP地址(例如,来自特殊的专用端点)并更新视图。

或者您可以在模板中添加一些websocket support,但我认为您的情况并不需要(似乎是过度工程)...