有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java计划任务导致OutOfMemoryError(Spring引导)

应用程序工作正常,直到计划的任务在后端启动。此任务更新云数据库中的帖子,如果有更改,则重写现有帖子。在更新了大约400-500篇帖子后,应用程序崩溃了H2数据库,并给出了一个错误:线程“File Watcher”java中出现异常。lang.OutOfMemoryError:Java堆空间

我预定的任务

 @Scheduled(cron = "0 0 15 ? * SUN")
  public void updateAllWeekly() {
    log.debug(
        "<< UPDATE ALL >> CRON IS STARTED. The time is now {}", dateFormat.format(new Date()));
    postService.updateAll();
  }

updateAll方法

  public void updateAll() {

    try {

      Long startId = 0L;

      do {
        startId = updateFrom(startId);
      } while (startId > 0);

    } catch (FeignException ex) {
      log.debug("CALL ERROR", ex.contentUTF8());
      return;
    }
  }

updateFrom方法

public Long updateFrom(Long startId) {

    Long lastd = startId;

    try {
      List<Post> posts = cloud.pullPostsFromId(startId)
      int postSize = posts.size();

      if (postSize > 0) {
        lastd = posts.get(postSize - 1).getId();
      } else {
        startId = -1L;
        return startId;
      }

      for (Post post : posts) {

        updatePost(post);
      }

    } catch (FeignException ex) {
      log.debug("CALL ERROR");
    }

    return lastd + 1;
  }

updatePost方法按id(Post.getId)查找Post,设置更改的参数(如果有),并将其保存回数据库

完全错误:

Exception in thread "File Watcher" java.lang.OutOfMemoryError: Java heap space
    at java.base/java.util.Arrays.copyOfRange(Arrays.java:3821)
    at java.base/java.lang.StringLatin1.newString(StringLatin1.java:767)
    at java.base/java.lang.String.substring(String.java:1907)
    at java.base/java.lang.String.substring(String.java:1875)
    at java.base/java.io.File.getName(File.java:459)
    at java.base/java.io.UnixFileSystem.getBooleanAttributes(UnixFileSystem.java:262)
    at java.base/java.io.File.isFile(File.java:886)
    at org.springframework.boot.devtools.filewatch.FolderSnapshot.collectFiles(FolderSnapshot.java:69)
    at org.springframework.boot.devtools.filewatch.FolderSnapshot.collectFiles(FolderSnapshot.java:67)
    at org.springframework.boot.devtools.filewatch.FolderSnapshot.collectFiles(FolderSnapshot.java:67)
    at org.springframework.boot.devtools.filewatch.FolderSnapshot.collectFiles(FolderSnapshot.java:67)
    at org.springframework.boot.devtools.filewatch.FolderSnapshot.collectFiles(FolderSnapshot.java:67)
    at org.springframework.boot.devtools.filewatch.FolderSnapshot.<init>(FolderSnapshot.java:58)
    at org.springframework.boot.devtools.filewatch.FileSystemWatcher$Watcher.getCurrentSnapshots(FileSystemWatcher.java:277)
    at org.springframework.boot.devtools.filewatch.FileSystemWatcher$Watcher.scan(FileSystemWatcher.java:251)
    at org.springframework.boot.devtools.filewatch.FileSystemWatcher$Watcher.run(FileSystemWatcher.java:236)
    at java.base/java.lang.Thread.run(Thread.java:832)

共 (0) 个答案