Spring Framework + Thymeleaf:如何每隔几秒调用一次ModelAndView方法/计划任务

时间:2017-06-14 20:23:39

标签: spring scheduled-tasks thymeleaf

我正在使用Spring的API与Twitter的API,我有一个方法来获取与主题标签相关的推文。

使用带有th:object和th:field的th:action从视图中调用此方法,从中我获取查询的主题标签。

在控制器中,我有一个ModelAndView方法,它接收“hashtags”并获取推文并返回到相同的视图,但现在有一个List填充了这些推文。

有什么办法当我按下按钮时方法每x秒调用一次,直到我按下另一个按钮或我调用另一种方法? (例如,过滤当前推文列表或进行新搜索)。

我知道有一个注释@Scheduled但它需要一个非参数方法,而且我需要在执行的某个部分重复一个方法,而不是从它的开头重复。

我知道这是一个基本的想法,但无论如何,我要留下我已经编程的图片(顶部),以及我想要得到的(底部) Visual explanation of the problem

这是观点:

<form class="navbar-form navbar-left" action="#" th:action="@{/twittercontrolador/buscartuits}" th:object="${textoplano}" method="post">
                <div class="row">
                    <div class="form-group">
                        <b>Hashtags/Menciones:</b> <input type="text" class="form-control" placeholder="Max 5 - #asdf / @nick" th:field="*{texto}" />
                        <button type="submit" class="btn btn-primary" value="Buscar">Buscar</button>
                    </div>
                </div>
            </form>

这里是控制器(只是一个@controller,弹簧控制器页面)

 @PostMapping(value="/buscartuits")
        public ModelAndView obtenerTuits(@ModelAttribute("textoplano") TextoEnPlano texto){
            ModelAndView mav = new ModelAndView("vistaPrincipal");
            String resultadoBusqueda = this.textoBusqueda(texto.getTexto());
            List<Tweet> listaTuits = twitter.searchOperations().search(resultadoBusqueda).getTweets();
            listaPropia = new ArrayList<ObjetoTuit>();
            int contAux = this.listaDe5Elementos.getNumElementos(); 

            for(int i=0; i<listaTuits.size();i++){

                ...
            }

            mav.addObject("listaobjetostuits", listaPropia);
            return mav;
        }

我尝试过使用它:

https://spring.io/guides/gs/scheduling-tasks/但这似乎不适合我

1 个答案:

答案 0 :(得分:0)

它最终只是Java代码。你不希望它连接到前端吗?如果是,请在客户端html中使用setTimeout。如果你只想在后端做一些事情,可以使用spring批处理或java线程(不推荐但是如果你正确地执行它会工作,并且你的代码中没有太多其他线程被启动)。

您尝试过哪些代码?当你说Controller是指REST API调用?或者它是JSP或弹簧控制器页面?

https://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html我们不在控制器上使用它 - &gt;通常在后端的服务/门面层。喜欢完成后台工作。

如果您从HTML中执行此操作,则可以使用https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout Javascript代码

您可以每隔x个时间单位将cron用于所有网址。

您可以使用HTTP库以编程方式调用URL,该步骤可以具有身份验证(登录)步骤,然后调用Controller步骤。然后使用调度程序以某种重复的方式实现它。 Spring有一个HTTP库,或者可以使用Apache Http Components,或OkHttp或java.net.URL,具体取决于页面的复杂程度以及适用于您的情况。我用过全部。

甚至可以通过API或以编程方式使用Jmeter。

您可以制作一个selenium以编程方式打开浏览器并执行登录,打开页面,填充和放大等操作。在运行selenium代码的系统上提交表单。然后在此应用程序中使用调度程序。

首先,您需要定义您的问题以及您更好地尝试了什么。

使用我列出的替代方案进行更多研究。