【问题标题】:Consuming web services periodically instead of frequent consumption定期使用 Web 服务,而不是频繁使用
【发布时间】:2016-10-25 09:58:47
【问题描述】:

我有一个用 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 服务。

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

【问题讨论】:

    标签: web-services


    【解决方案1】:

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

    为每个元数据创建表,例如假期、班次详细信息、休息日等,以及主元数据表。

    在服务器端编写了新的网络服务来提供元数据网络服务的最后更新时间。

    在每次操作期间,使用上次更新的用于检查数据的 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;
        }
    

    【讨论】:

    • 这种技术有什么问题?看来你自己解决了这个问题。
    • 如果您知道何时会更新,例如在 1 月 1 日,我只能建议改进以在每种数据中包含“到期日期”。这样可以避免调用负责检查数据是否已更新的服务。您还可以标记每个寄存器的最后更新数据并仅下载更新的数据。但是如果不从您的系统中了解更多数据,我无法判断这个建议是否好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多