我正在使用Spring的API与Twitter的API,我有一个方法来获取与主题标签相关的推文。
使用带有th:object和th:field的th:action从视图中调用此方法,从中我获取查询的主题标签。
在控制器中,我有一个ModelAndView方法,它接收“hashtags”并获取推文并返回到相同的视图,但现在有一个List填充了这些推文。
有什么办法当我按下按钮时方法每x秒调用一次,直到我按下另一个按钮或我调用另一种方法? (例如,过滤当前推文列表或进行新搜索)。
我知道有一个注释@Scheduled但它需要一个非参数方法,而且我需要在执行的某个部分重复一个方法,而不是从它的开头重复。
我知道这是一个基本的想法,但无论如何,我要留下我已经编程的图片(顶部),以及我想要得到的(底部)
这是观点:
<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;
}
我尝试过使用它:
答案 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代码的系统上提交表单。然后在此应用程序中使用调度程序。
首先,您需要定义您的问题以及您更好地尝试了什么。
使用我列出的替代方案进行更多研究。