2017-06-14 97 views
1

我使用的是Spring的框架與Twitter的API,並且我有一個獲取與標籤相關的推文的方法。Spring Framework + Thymeleaf:如何每隔幾秒調用一次ModelAndView方法/ Scheduled任務

該方法是從使用第視圖稱爲:與作用的第:對象和第:字段從哪裏獲得用於查詢的主題標記。

在控制器中,我有一個ModelAndView方法,它接收「主題標記」,並得到鳴叫和返回到同一視圖,但現在具有填充有這些鳴叫列表。

有什麼辦法,當我按下按鈕的方法調用本身每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/但是這似乎並沒有被正確的進行到底我

回答

0

它只是Java代碼。你不想讓它連接到前端嗎?如果是在客戶端html中使用setTimeout。如果你只想在後端做一些事情,可以使用spring批處理或java線程(不推薦,但是如果你正確地做到這一點,並且你的代碼中沒有太多的其他線程正在啓​​動,那麼它會起作用)。

你試過了什麼代碼?當你說Controller時,你的意思是一個REST API調用?或者它是一個JSP或彈簧控制器頁面?

https://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html我們不使用此一控制器上 - >通常在後端的服務/立面層。就像做後臺工作一樣。

如果從HTML這樣做可以使用https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout Javascript代碼

您可以使用cron來所有的URL每x時間單位。

您可以使用HTTP庫以編程方式調用您的網址,可以有一個authenticaiton(登錄)步驟,然後打電話給你控制器的步驟。然後使用調度程序以重複的方式進行。 Spring有一個HTTP庫,或者可以使用Apache Http組件,或者OkHttp或java.net.URL,具體取決於頁面的複雜性以及你的情況。我已經全部使用了。

甚至可以使用Jmeter - 通過API或以編程方式。

您可以讓硒以編程方式打開瀏覽器並執行諸如登錄,打開頁面之類的操作,並在運行硒代碼的系統上填寫&提交表單。然後在這個應用程序中使用調度器。

首先,您需要定義您的問題以及您嘗試更好的方式。

並使用我列出的替代品做更多的研究。

+0

剛剛編輯了評論,我用過:https://spring.io/guides/gs/scheduling-tasks/,但正如我所說,它似乎對我沒有好處。此外,我需要從後面做一些邏輯,所以我認爲HTTE的JavaScript解決方案可能不適合我 – WikiOverflow

+0

除非你指定爲什麼它不正確,我們不能幫你。我增加了幾個選擇。 Cron,http library,Jmeter,selenium都可以在你自己的應用程序內部或外部執行此操作 – tgkprog

相關問題