Web services 定期消费web服务,而不是频繁消费

Web services 定期消费web服务,而不是频繁消费,web-services,Web Services,我有一个用JavaFX编写的桌面应用程序(客户端),它执行操作 用户通过单击开始按钮开始操作,执行不同的输入并停止操作 在操作期间,客户端从web服务(在java服务器上公开)获取数据 服务器上的大多数数据每年更新一次。 目前,我在每次操作中都会访问所有web服务(大多数web服务在每年数据更改时返回相同的数据) //在操作启动时调用以下函数 getMataDataFromServer(){ List shiftDetails=getShiftDetailsFromServer(); List

我有一个用JavaFX编写的桌面应用程序(客户端),它执行操作

用户通过单击开始按钮开始操作,执行不同的输入并停止操作

在操作期间,客户端从web服务(在java服务器上公开)获取数据

服务器上的大多数数据每年更新一次。 目前,我在每次操作中都会访问所有web服务(大多数web服务在每年数据更改时返回相同的数据)

//在操作启动时调用以下函数
getMataDataFromServer(){
List shiftDetails=getShiftDetailsFromServer();
List weeklyOffDays=getWeeklyOffDayMetadata();
列出假日=getHolidayMetaData();
//等等,比如8种不同的大尺寸元数据,这会降低响应时间。
}
有没有最好的解决方案来解决这个问题,因为我不想在每次操作中都使用每年一次的web服务


或者我可以执行web服务缓存吗?

为了减少操作周期和大量响应时间,我在客户端引入了SQLite数据库

为每个元数据创建表,如假日、班次明细、休息日等,以及主元数据表

在服务器端编写了新的web服务,以提供元数据web服务的最后更新时间

在每次操作期间,使用上次更新的web服务检查数据是否在操作启动后更改

fetchAndSaveMetaDataLastUpdatedInfo() {
    List<MetaData> metdataList = fetchMetaDataLastUpdatedInfo();
    // Saving meta data last updated info to local db
    saveMetaDataLastUpdatedInfoToLocalDB();
}
fetchandsaveMetadataLastUpdateInfo(){
List metdataList=FetchMetadataLastUpdateInfo();
//将元数据上次更新的信息保存到本地数据库
saveMetaDataLastUpdatedInfoToLocalDB();
}
在使用每个web服务时,检查上次更新的时间,并相应地从本地数据库或web服务获取数据

private List<ShiftDetail> fetchShiftDetails(){
    boolean fetchShiftFromDB = isMetaDataLastUpdatedAfterOperationStart(Constant.SHIFT);
        List<ShiftDetail> shiftDetails;
        if (fetchShiftFromDB) {
            shiftDetails = fetchShiftDetailsFromLocalDB();
        } else {
            shiftDetails = fetchShiftDetailsFromServer();
        }
        return shiftDetails;
    }
private List fetchShiftDetails(){
boolean fetchShiftFromDB=IsMetadataLastUpdateAfterOperationStart(常量.SHIFT);
列出移位的细节;
if(fetchShiftFromDB){
shiftDetails=fetchShiftDetailsFromLocalDB();
}否则{
shiftDetails=fetchShiftDetailsFromServer();
}
返回移位细节;
}

这项技术有什么问题?。看来你自己已经解决了这个问题。我只能建议改进,如果你知道每种数据的更新日期,比如1月1日,那么就在每种数据中添加“过期日期”。这将避免调用负责检查数据是否已更新的服务。您还可以标记每个寄存器的上次更新数据,并仅下载更新的数据。但是,如果不了解您系统中的更多数据,我无法判断此建议是否有效
private List<ShiftDetail> fetchShiftDetails(){
    boolean fetchShiftFromDB = isMetaDataLastUpdatedAfterOperationStart(Constant.SHIFT);
        List<ShiftDetail> shiftDetails;
        if (fetchShiftFromDB) {
            shiftDetails = fetchShiftDetailsFromLocalDB();
        } else {
            shiftDetails = fetchShiftDetailsFromServer();
        }
        return shiftDetails;
    }