我有一个用 JavaFX 编写的桌面应用程序(客户端),用于执行操作。
用户通过单击开始按钮开始操作,执行不同的条目并停止操作。
在操作期间,客户端从 Web 服务(在 Java 服务器上公开)获取数据。
大部分数据每年在服务器上更新。 目前,我在每次操作期间都会访问所有 Web 服务(大多数 Web 服务返回与每年数据更改相同的数据)
//following function is called on operation start
getMataDataFromServer() {
List<ShiftDetail> shiftDetails = getShiftDetailsFromServer();
List<Day> weeklyOffDays = getWeeklyOffDayMetadata();
List<Day> holidays = getHolidayMetaData();
//and so on like 8 different meta data of large size which slow down response time.
}
这个问题有没有最好的解决方案,因为我不想在每次操作期间都访问年度网络服务。
或者我可以执行 Web 服务缓存吗?
最佳答案
为了减少操作周期时间和较大的响应时间,我在客户端引入了 SQLite 数据库。
为每个元数据(例如假期、轮类详细信息、休息周等)以及主元数据表创建了表格。
在服务器端编写新的 Web 服务来提供元数据 Web 服务的上次更新时间。
在每次操作期间,使用上次更新的 Web 服务来检查数据在操作开始后是否发生更改。
fetchAndSaveMetaDataLastUpdatedInfo() {
List<MetaData> metdataList = fetchMetaDataLastUpdatedInfo();
// Saving meta data last updated info to local db
saveMetaDataLastUpdatedInfoToLocalDB();
}
在使用每个 Web 服务时,检查上次更新时间并相应地从本地数据库或 Web 服务获取数据。
private List<ShiftDetail> fetchShiftDetails(){
boolean fetchShiftFromDB = isMetaDataLastUpdatedAfterOperationStart(Constant.SHIFT);
List<ShiftDetail> shiftDetails;
if (fetchShiftFromDB) {
shiftDetails = fetchShiftDetailsFromLocalDB();
} else {
shiftDetails = fetchShiftDetailsFromServer();
}
return shiftDetails;
}
关于web-services - 定期消费网络服务而不是频繁消费,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40236914/