故障排查
本页面列出了使用 LCGYL Framework 时的常见问题和解决方案。
启动问题
应用无法启动
症状:应用启动时抛出异常
可能原因:
- JDK 版本不正确
- 依赖冲突
- 配置文件错误
解决方案:
检查 JDK 版本
bashjava -version # 应该显示 21 或更高版本检查依赖
gradlegradle dependencies检查配置文件
- 确保
application.properties格式正确 - 检查配置项是否有拼写错误
- 确保
ClassNotFoundException
症状:ClassNotFoundException: com.lcgyl.framework.core.Application
原因:依赖未正确添加
解决方案:
gradle
dependencies {
implementation 'com.lcgyl:lcgyl-framework-core:2.2.0'
}刷新 Gradle 依赖:
bash
gradle clean build依赖注入问题
组件未找到
症状:NoSuchBeanException: No bean of type 'XXX' found
原因:
- 组件未添加
@Component注解 - 组件不在扫描路径下
- 组件扫描配置错误
解决方案:
添加 @Component 注解
java@Component // 确保有这个注解 public class UserService { }检查包路径
java// 确保组件在主类的包或子包下 @ComponentScan("com.example") // 指定扫描路径 public class Application { }
循环依赖
症状:CircularDependencyException
原因:两个或多个组件相互依赖
解决方案:
重构代码,消除循环依赖
java// ❌ 错误:循环依赖 @Component public class ServiceA { @Inject private ServiceB serviceB; } @Component public class ServiceB { @Inject private ServiceA serviceA; } // ✅ 正确:提取公共接口 @Component public class ServiceA { @Inject private CommonService commonService; } @Component public class ServiceB { @Inject private CommonService commonService; }使用 Setter 注入
java@Component public class ServiceA { private ServiceB serviceB; @Inject public void setServiceB(ServiceB serviceB) { this.serviceB = serviceB; } }
配置问题
配置值未注入
症状:配置值为 null 或默认值
原因:
- 配置文件路径错误
- 配置项名称错误
- 配置文件未加载
解决方案:
检查配置文件位置
- 确保
application.properties在src/main/resources下
- 确保
检查配置项名称
properties# application.properties app.name=MyAppjava@Value("app.name") // 确保名称匹配 private String name;启用配置日志
propertieslogging.level.com.lcgyl.framework.core.config=DEBUG
配置文件未找到
症状:ConfigurationException: Configuration file not found
解决方案:
检查文件路径
src/ └── main/ └── resources/ └── application.properties ← 确保在这里指定配置文件路径
javaApplication app = Application.builder() .configLocation("classpath:config/application.properties") .run(args);
事件总线问题
事件未被处理
症状:发布事件后,监听器未被调用
原因:
- 监听器未添加
@Subscribe注解 - 监听器未注册为组件
- 事件类型不匹配
解决方案:
检查监听器注解
java@Component // 必须是组件 public class UserEventListener { @Subscribe // 必须有这个注解 public void onUserCreated(UserCreatedEvent event) { // 处理事件 } }检查事件类型
java// 确保事件类型完全匹配 eventBus.publish(new UserCreatedEvent(user)); // 发布 @Subscribe public void onUserCreated(UserCreatedEvent event) { // 接收 // 类型必须完全一致 }
性能问题
应用启动慢
原因:
- 扫描路径过大
- 组件过多
- 初始化逻辑复杂
解决方案:
缩小扫描范围
java@ComponentScan("com.example.app") // 只扫描必要的包延迟初始化
java@Component(lazy = true) // 延迟初始化 public class HeavyService { }异步初始化
java@Component public class AsyncInitService { @PostConstruct public void init() { CompletableFuture.runAsync(() -> { // 异步初始化 }); } }
内存占用高
原因:
- 单例组件过多
- 缓存未清理
- 事件监听器泄漏
解决方案:
使用原型作用域
java@Component(scope = Scope.PROTOTYPE) public class PrototypeService { }定期清理缓存
java@Scheduled(cron = "0 0 * * * ?") public void clearCache() { cache.clear(); }取消事件订阅
java@PreDestroy public void cleanup() { eventBus.unsubscribe(this); }
日志问题
日志未输出
原因:
- 日志级别设置过高
- 日志配置错误
- 日志框架未正确配置
解决方案:
检查日志级别
properties# application.properties logging.level.root=INFO logging.level.com.example=DEBUG添加日志依赖
gradledependencies { implementation 'org.slf4j:slf4j-api:2.0.9' runtimeOnly 'ch.qos.logback:logback-classic:1.4.14' }配置 Logback
xml<!-- logback.xml --> <configuration> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="INFO"> <appender-ref ref="CONSOLE" /> </root> </configuration>
获取帮助
如果以上方案都无法解决你的问题:
查看完整文档
搜索已知问题
联系我们
- 邮箱:lcgylupup@petalmail.com
- 官网:https://www.lcgylfamily.cn