apollo-configservice/src/main/java/com/ctrip/framework/apollo/configservice/service/AccessKeyServiceWithCache.java/AccessKeyServiceWithCache/loadNewAndUpdatedAccessKeys
class AccessKeyServiceWithCache:  private void loadNewAndUpdatedAccessKeys() {
    boolean hasMore = true;
    while (hasMore && !Thread.currentThread().isInterrupted()) {
      //current batch is 500
      List<AccessKey> accessKeys = accessKeyRepository
          .findFirst500ByDataChangeLastModifiedTimeGreaterThanOrderByDataChangeLastModifiedTimeAsc(lastTimeScanned);
      if (CollectionUtils.isEmpty(accessKeys)) {
        break;
      }

      int scanned = accessKeys.size();
      mergeAccessKeys(accessKeys);
      logger.info("Loaded {} new/updated Accesskey from startTime {}", scanned, lastTimeScanned);

      hasMore = scanned == 500;
      lastTimeScanned = accessKeys.get(scanned - 1).getDataChangeLastModifiedTime();

      // In order to avoid missing some records at the last time, we need to scan records at this time individually
      if (hasMore) {
        List<AccessKey> lastModifiedTimeAccessKeys = accessKeyRepository.findByDataChangeLastModifiedTime(lastTimeScanned);
        mergeAccessKeys(lastModifiedTimeAccessKeys);
        logger.info("Loaded {} new/updated Accesskey at lastModifiedTime {}", scanned, lastTimeScanned);
      }
    }
  }