当前位置: 首页 > 知识库问答 >
问题:

Spring Web应用程序-定期刷新数据

马博学
2023-03-14
    @GetMapping("/banking/stocks")
public String stocks(Model model) {

    model.addAttribute("stock", new StockDto());
    try {
        List<Stock> stocks = stockService.getDefaultStocks();
        model.addAttribute("stocks", stocks);

    } catch (IOException e) {
        e.printStackTrace();
    }
    return "stocks.html";
}
@Service
public class StockServiceImpl implements StockService {

private String[] startingStocks = { "AAPL", "BABA", "MSFT", "AXP", "BA", "AMD", "TSLA", "MA", "SHOP", "GOOGL",
        "KL" };

@Override
public Stock getStock(String stockName) throws IOException {
    Stock stock = YahooFinance.get(stockName);
    return stock;
}

@Override
public Map<String, Stock> getStock(String[] s) throws IOException {
    Map<String, Stock> stocks = YahooFinance.get(s);
    return stocks;
}

@Override
public List<Stock> getDefaultStocks() throws IOException {
     Map<String, Stock> stocks = YahooFinance.get(startingStocks);
     List<Stock> stockList = new ArrayList<Stock>();
     for(String s : startingStocks) {
         stockList.add(stocks.get(s));
     }
    return stockList;
}

}

用于显示股票的HTML页面:

<main class='main-content bgc-grey-100'>
        <div id='mainContent'>
            <div class="container-fluid">
                <br>
                <h4 class="c-grey-900 mT-10 mB-30">Stock Table</h4>
                <form action="#" th:object="${stock}" th:action="@{/banking/stock-search}"
                    method="POST" class="form-inline my-2 my-lg-0">
                    <input class="form-control mr-sm-2" type="search"
                        th:field="*{name}" placeholder="Search Stock"
                        aria-label="Search">
                    <button class="btn btn-outline-primary my-2 my-sm-0" type="submit">Search</button>
                </form>

                <br>
                <div class="row">
                    <div class="col-md-12">
                        <div class="bgc-white bd bdrs-3 p-20 mB-20">
                            <table id="dataTable" class="table table-striped table-bordered"
                                cellspacing="0" width="100%">
                                <thead>
                                    <tr>
                                        <th>Ticker</th>
                                        <th>Trade</th>
                                        <th>Name</th>
                                        <th>Price</th>
                                        <th>(%) Change</th>
                                        <th>Div Yield (%)</th>
                                    </tr>
                                </thead>
                                <tfoot>
                                    <tr>
                                        <th>Ticker</th>
                                        <th>Trade</th>
                                        <th>Name</th>
                                        <th>Price</th>
                                        <th>(%) Change</th>
                                        <th>Div Yield (%)</th>
                                    </tr>
                                </tfoot>
                                <tbody>
                                    <tr th:each="stock : ${stocks}">
                                        <td th:text="${stock.getSymbol()}"></td>
                                            <td>
                                             <form action="#" th:action="@{/banking/stocks/} + ${stock.symbol}" method="get">
                                                 <button class="btn btn-outline-success my-2 my-sm-0" th:id="'table_entry_childs_button_' + ${stock.symbol}" type="submit">
                                                    <i>Trade</i>
                                                  </button>
                                             </form>
                                         </td>
                                        <td th:text="${stock.getName()}"></td>
                                        <td th:text="${stock.getQuote().getPrice()}"></td>
                                        <td th:class="${stock.getQuote().getChangeInPercent() > 0 ? 'text-success' : 'text-danger'}" th:text="${stock.getQuote().getChangeInPercent() + '%'} "></td>
                                        <td th:if="${stock.getDividend().getAnnualYield() != null}" th:text="${stock.getDividend().getAnnualYield() + '%'}">0.00%</td>
                                        <td th:if="${stock.getDividend().getAnnualYield() == null}" >0.00%</td>     
                                    </tr>
                                </tbody>
                            </table>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </main>

共有1个答案

薛经纶
2023-03-14

您可以使用spring Boot来利用STOMP协议和web套接字。供参考:https://www.baeldung.com/spring-websockets-send-message-to-user

在后端,您可以使用

@Autowired
SimpMessagingTemplate messagetemplate;

public void somemethod(String strParam){
 while (true){
    // build string or json whatever you need to send
    messagetemplate.convertAndSend("/blabla/blabla",strParam);
    Thread.sleep(30*1000);
 }

}

<script src="https://cdnjs.cloudflare.com/ajax/libs/stomp.js/2.3.3/stomp.js"> 

<script type="text/javascript">
function load(){
   
   var stompClient = Stomp.client("ws://localhost:8080/ws");
   stompClient.connect({}, function (frame) {
    
       stompClient.subscribe('/blabla/blabla', function (message) {
         
        // do something here
       });
   });
}
<html>
  <body  onload="load()">
  </body>
</html>
 类似资料:
  • 【参数】 子链刷新的参数在subchainbase.sol中定义。参数列表如下: 1.刷新周期Round数值:定义子链经过多少区块后刷新。假如子链有100个节点,每个节点依次产生block,定义Round数为5,则每过500block 刷新一次。 2.当前刷新id 索引:指定下次刷新的id 在Nodelist中 的索引值 3.刷新过期数值expiration:指定的id在block [0, 2*e

  • 我有一个应用程序,它从一个流接收大部分输入,但是它的一些数据来自RDBMS和一系列静态文件。 流将连续发出事件,因此flink作业永远不会结束,但是如何定期刷新RDBMS数据和静态文件以捕获对这些源的任何更新? 我目前正在使用从数据库中读取数据。 下面是我尝试做的大致示意图:

  • 在SpringJSFWeb应用程序中将Netty客户端处理程序配置为消息接收点,有没有具体的方法? 如果一些独立的Java应用程序充当Netty服务器,我如何接收到SpringJSFWeb应用程序的消息?

  • 让我们看看同步方法MyClientFacade.getUser(): 如果使用或混合使用,则获得相同的行为: 假设我的用户在缓存中的得分值是5,而Firebase DB的得分值是11。 如果取消示例中代码的注释,Firebase缓存将有足够的时间更新,并且我的将返回正确的得分值(11)。 那么如何直接从服务器端直接询问最新的值并绕过缓存呢?

  • 我有这个应用程序工作在一个标准的LAMP堆栈,但当我试图运行它在docker nginx php-fpm我得到一个错误(使用richarove/nginx-php-fpm. docker容器)。 编辑:此容器在同一容器中运行nginx和php fpm。 http://ip-vm/sistema/index.php/gui/gui/login 这是标准输出错误: 2016/04/13 23:23:1

  • 我理解客户机应用程序使用refresh_token(连同它的凭据)为最终用户(资源所有者)获取新的访问令牌,而不是存储最终用户的用户名/密码,并在每次access_token过期时发送它们。 然而,在我看来,这听起来像refresh_token和access_token一样好,它几乎只是一个额外的服务器调用,所以为什么不直接使用它,即如果refresh token是有效的授予访问权限呢?