我有一个用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服务。
或者我可以执行网络服务缓存吗?
答案 0 :(得分:2)
为减少操作周期时间和大响应时间,我在客户端引入了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;
}