Skip to content

Commit 95db985

Browse files
committed
resolve memory overflow by delaying cache initialization
1 parent 3a3cb50 commit 95db985

6 files changed

Lines changed: 102 additions & 8 deletions

File tree

src/main/java/com/phantoms/phantomsbackend/PhantomsBackendApplication.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,15 @@
55
import org.springframework.boot.autoconfigure.SpringBootApplication;
66
import org.springframework.boot.autoconfigure.domain.EntityScan;
77
import org.springframework.context.annotation.ComponentScan;
8+
import org.springframework.scheduling.annotation.EnableAsync;
89
import org.springframework.scheduling.annotation.EnableScheduling;
910

1011
@SpringBootApplication(exclude = {
1112
MybatisAutoConfiguration.class // 排除MyBatis自动配置,项目未使用Mapper
1213
})
1314
@EntityScan("com.phantoms.phantomsbackend.pojo.entity")
1415
@EnableScheduling
16+
@EnableAsync // 启用异步支持,用于延迟初始化
1517
//@ComponentScan(basePackages = "com.phantoms.phantomsbackend")
1618
public class PhantomsBackendApplication {
1719
public static void main(String[] args) {

src/main/java/com/phantoms/phantomsbackend/service/DaoYuKeyCacheService.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ public void scheduledEvictCache() {
5050
/**
5151
* 应用启动时预加载缓存
5252
*/
53-
@PostConstruct
5453
public void preloadCache() {
5554
logger.info("应用启动,预加载DaoYu Key缓存");
5655
getDaoYuKey(); // 触发缓存加载
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
package com.phantoms.phantomsbackend.service;
2+
3+
import com.phantoms.phantomsbackend.service.scheduler.FF14CrystalNewsScheduler;
4+
import com.phantoms.phantomsbackend.service.scheduler.FF14GlobalNewsScheduler;
5+
import com.phantoms.phantomsbackend.service.scheduler.FF14NewsScheduler;
6+
import jakarta.annotation.PostConstruct;
7+
import org.slf4j.Logger;
8+
import org.slf4j.LoggerFactory;
9+
import org.springframework.beans.factory.annotation.Autowired;
10+
import org.springframework.boot.context.event.ApplicationReadyEvent;
11+
import org.springframework.context.event.EventListener;
12+
import org.springframework.scheduling.annotation.Async;
13+
import org.springframework.stereotype.Service;
14+
15+
@Service
16+
public class DelayedInitService {
17+
18+
private static final Logger logger = LoggerFactory.getLogger(DelayedInitService.class);
19+
20+
@Autowired(required = false)
21+
private FF14NewsScheduler ff14NewsScheduler;
22+
23+
@Autowired(required = false)
24+
private FF14CrystalNewsScheduler ff14CrystalNewsScheduler;
25+
26+
@Autowired(required = false)
27+
private FF14GlobalNewsScheduler ff14GlobalNewsScheduler;
28+
29+
@Autowired(required = false)
30+
private DaoYuKeyCacheService daoYuKeyCacheService;
31+
32+
@EventListener(ApplicationReadyEvent.class)
33+
@Async
34+
public void onApplicationReady() {
35+
logger.info("应用启动完成,开始延迟初始化缓存...");
36+
37+
// 延迟1秒开始初始化,避免启动时内存峰值
38+
try {
39+
Thread.sleep(1000);
40+
} catch (InterruptedException e) {
41+
Thread.currentThread().interrupt();
42+
}
43+
44+
// 逐个初始化缓存,避免同时加载
45+
initDaoYuKeyCache();
46+
initFF14NewsCache();
47+
initFF14CrystalNewsCache();
48+
initFF14GlobalNewsCache();
49+
50+
logger.info("延迟初始化缓存完成");
51+
}
52+
53+
private void initDaoYuKeyCache() {
54+
if (daoYuKeyCacheService != null) {
55+
try {
56+
logger.info("开始初始化DaoYu Key缓存");
57+
daoYuKeyCacheService.preloadCache();
58+
logger.info("DaoYu Key缓存初始化完成");
59+
} catch (Exception e) {
60+
logger.error("初始化DaoYu Key缓存失败", e);
61+
}
62+
}
63+
}
64+
65+
private void initFF14NewsCache() {
66+
if (ff14NewsScheduler != null) {
67+
try {
68+
logger.info("开始初始化FF14国服新闻缓存");
69+
ff14NewsScheduler.initCache();
70+
logger.info("FF14国服新闻缓存初始化完成");
71+
} catch (Exception e) {
72+
logger.error("初始化FF14国服新闻缓存失败", e);
73+
}
74+
}
75+
}
76+
77+
private void initFF14CrystalNewsCache() {
78+
if (ff14CrystalNewsScheduler != null) {
79+
try {
80+
logger.info("开始初始化FF14水晶世界新闻缓存");
81+
ff14CrystalNewsScheduler.initCache();
82+
logger.info("FF14水晶世界新闻缓存初始化完成");
83+
} catch (Exception e) {
84+
logger.error("初始化FF14水晶世界新闻缓存失败", e);
85+
}
86+
}
87+
}
88+
89+
private void initFF14GlobalNewsCache() {
90+
if (ff14GlobalNewsScheduler != null) {
91+
try {
92+
logger.info("开始初始化FF14国际服新闻缓存");
93+
ff14GlobalNewsScheduler.initCache();
94+
logger.info("FF14国际服新闻缓存初始化完成");
95+
} catch (Exception e) {
96+
logger.error("初始化FF14国际服新闻缓存失败", e);
97+
}
98+
}
99+
}
100+
}

src/main/java/com/phantoms/phantomsbackend/service/scheduler/FF14CrystalNewsScheduler.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import org.springframework.scheduling.annotation.Scheduled;
1111
import org.springframework.stereotype.Component;
1212

13-
import javax.annotation.PostConstruct;
1413
import java.util.ArrayList;
1514
import java.util.List;
1615
import java.util.stream.Collectors;
@@ -42,7 +41,6 @@ public class FF14CrystalNewsScheduler {
4241
@Value("${napcat.crystal-group-id}")
4342
private String crystalGroupId;
4443

45-
@PostConstruct
4644
public void initCache() {
4745
logger.info("初始化FF14水晶世界新闻缓存");
4846
try {

src/main/java/com/phantoms/phantomsbackend/service/scheduler/FF14GlobalNewsScheduler.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99
import org.springframework.beans.factory.annotation.Value;
1010
import org.springframework.scheduling.annotation.Scheduled;
1111
import org.springframework.stereotype.Component;
12-
import javax.annotation.PostConstruct;
13-
1412
import java.util.ArrayList;
1513
import java.util.List;
1614
import java.util.stream.Collectors;
@@ -40,7 +38,6 @@ public class FF14GlobalNewsScheduler {
4038
@Value("${napcat.default-group-id}")
4139
private String defaultGroupId;
4240

43-
@PostConstruct
4441
public void initCache() {
4542
logger.info("初始化FF14国际服新闻缓存");
4643
try {

src/main/java/com/phantoms/phantomsbackend/service/scheduler/FF14NewsScheduler.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import org.springframework.beans.factory.annotation.Value;
1010
import org.springframework.scheduling.annotation.Scheduled;
1111
import org.springframework.stereotype.Component;
12-
import javax.annotation.PostConstruct;
1312

1413
import java.util.ArrayList;
1514
import java.util.List;
@@ -40,7 +39,6 @@ public class FF14NewsScheduler {
4039
@Value("${napcat.default-group-id}")
4140
private String defaultGroupId;
4241

43-
@PostConstruct
4442
public void initCache() {
4543
logger.info("初始化FF14新闻缓存");
4644
try {

0 commit comments

Comments
 (0)