【发布时间】:2020-02-14 20:20:40
【问题描述】:
我正在为我的 Spring 引导应用程序编写一些 Java 代码,以接收 40,000 个元素的列表,并通过 Thymeleaf 将其发布到下拉字段中。但是,我注意到当我加载数据并转到下拉列表时,一切都很慢。
有人告诉我缓存这些值并存储它们。虽然我对这个过程不太熟悉,但我尝试为我的 SpringBootApplication 使用 @Cacheable 注释,但它仍然不起作用。我想看看我做错了什么,或者是否有更好的方法来解决我遇到的这个问题。
服务层:
@SuppressWarnings("unchecked")
@Cacheable("String")
public List<String> getServerListing(){
StoredProcedureQuery storedProcedure = entityManager.createStoredProcedureQuery("GetAllServers");
return storedProcedure.getResultList();
}
首先,我有一个存储过程会从服务器中删除所有数据(约 40,000 条记录)。
控制器:
List<String> servers = joinQueryService.getServerListing();
modelAndView.addObject("servers", servers);
然后,我将其设置为字符串列表并将其发送到前端。
百里香:
<div class="row">
<div class="col col-lg-9 search-bar">
<div class="form-group">
<label>Server:</label> <select class="js-example-basic-single3"
th:field="*{servers}" id="selectData3">
<option value=""></option>
<option th:each="servers : ${servers}" th:value="${servers}" th:text="${servers}" />
</select>
</div>
</div>
</div>
SpringBoot:
@SpringBootApplication
@Cacheable
public class TaddmDevApplication {
public static void main(String[] args) {
Policy.setPolicy(new TaddmPolicy());
SpringApplication.run(TaddmDevApplication.class, args);
}
}
【问题讨论】:
-
一切都很慢...有多慢?假设数据确实被缓存了(当然是在从数据库第一次加载之后),我很好奇在浏览器中渲染 40,000 条记录下拉列表花费了多少时间。例如,Chrome DevTools(或 FF/Edge 的类似工具)可以阐明这一点。
-
@andrewjames 所以在使用 Chrome 开发工具查看后,它显示加载大约需要 4 - 5 秒。如果可能的话,我的目标是将其减少到毫秒。