我想显示这个Spring VMC表:
@Controller
public class FileImportsController {
private EntityImportRequestsService entityImportRequestsService;
@Autowired
public FileImportsController(EntityImportRequestsService entityImportRequestsService) {
this.entityImportRequestsService = entityImportRequestsService;
}
@GetMapping("/imported_files")
public String viewHomePage(Model model) {
List<EntityImportRequestsTable> listProducts = entityImportRequestsService.findAll();
model.addAttribute("listProducts", listProducts);
return "index";
}
}
页码:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8"/>
<title>Product Manager</title>
</head>
<body>
<div align="center">
<h1>Product List</h1>
<table border="1" cellpadding="10">
<thead>
<tr>
<th>Product ID</th>
<th>Name</th>
<th>Brand</th>
<th>Made In</th>
<th>Price</th>
</tr>
</thead>
<tbody>
<tr th:each="product : ${listProducts}">
<td th:text="${product.requestId}">Product ID</td>
<td th:text="${product.name}">Name</td>
<td th:text="${product.brand}">Brand</td>
<td th:text="${product.madein}">Made in</td>
<td th:text="${product.price}">Price</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
如何每隔5秒拉取数据库表数据并刷新表数据?
5条答案
按热度按时间tgabmvqs1#
虽然您仍然可以使用javascript setInterval函数调用API,如下所示:
您的遗嘱:
1.服务器超载,想象一下数千人每5秒刷新一次。
1.显示旧数据的风险:数据将是5秒前的(示例产品可能脱销)。
一个更好的选择是使用真实的解决方案,使用WebSocket和消息传递,使用类似RabbitMQ的东西:
RabbitMQ会在数据库中的数据更改时向客户端发送更新(触发器可能会有帮助)。这样,客户端只在有新数据时才接收更新,而不是不断轮询服务器以获取更新。如果您在Azure中托管解决方案,则可以使用Azure存储队列或服务总线,在AWS中则可以使用SQS。类似的问题如下:Real time updates from database using JSF/Java EE
gkl3eglg2#
在HTML的head元素中使用 meta标签,如下所述:https://www.geeksforgeeks.org/how-to-automatic-refresh-a-web-page-in-fixed-time/
olhwl3o23#
你没有解释,你的要求到底是什么。数据真的每5秒改变一次吗?还是你不想错过一次更新?
要刷新您的网页,请使用此head标签:
但是如果数据只是不时地变化,我会使用推送(而不是拉取)。
例如,对于HTML5服务器发送事件:https://www.w3schools.com/html/html5_serversentevents.asp
您可以使用spring Boot scheduler每5秒查询一次db表,也可以在数据发生变化时在服务器端使用消息传递(我更喜欢这样,这样可以减少CPU负载和带宽,并且更可持续)。
332nm8kg4#
创建一个while循环,休眠5秒,然后从数据库中获取数据并更新DOM。
whhtz7ly5#
我认为,如果没有不同的体系结构,你所尝试做的是不可能的,因为你在这里有一个服务器端呈现的页面,它不使用websocket或类似的东西。
在“现代世界”中,您将有一个WebSocket客户端连接到您的后端,当您的数据库表发生更改时,它会真实的得到通知。(无论您是通过被动的方式知道数据更改,还是通过在后端使用“原始轮询到您的数据库表”,然后将更改推送到Websocket)
但如果你想保持现在的状态我看只有两个选择:
1.尝试一些 AJAX ,定期更新这个DOM元素
1.通过再次执行Rest API调用,每隔X秒用JavaScript刷新页面,这将重新加载数据