应用程序运行良好,直到计划任务在后端开始。此任务会更新云数据库中的帖子,如果有更改,它将重写现有帖子。更新大约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为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)