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) 个答案