Spring无法加载配置类

Posted

技术标签:

【中文标题】Spring无法加载配置类【英文标题】:Spring Cannot load configuration class 【发布时间】:2016-07-25 16:58:09 【问题描述】:

当我在 smartfox 服务器上使用 spring 时出现错误:

Exception: java.lang.IllegalStateException
Message: Cannot load configuration class: com.lagente.sfs2x.AppConfig
Description: Extension initialization failed.
+--- --- ---+
Stack Trace:
+--- --- ---+
org.springframework.context.annotation.ConfigurationClassPostProcessor.enhanceConfigurationClasses(ConfigurationClassPostProcessor.java:410)
org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanFactory(ConfigurationClassPostProcessor.java:263)
org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:284)
org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:130)
org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:677)
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:519)
org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:84)
com.lagente.sfs2x.ExampleSFSZoneExtension.initAppContext(ExampleSFSZoneExtension.java:32)
com.lagente.sfs2x.ExampleSFSZoneExtension.init(ExampleSFSZoneExtension.java:26)
com.smartfoxserver.v2.entities.managers.SFSExtensionManager.createExtension(SFSExtensionManager.java:303)
com.smartfoxserver.v2.entities.managers.SFSZoneManager.createZone(SFSZoneManager.java:433)
com.smartfoxserver.v2.entities.managers.SFSZoneManager.initializeZones(SFSZoneManager.java:249)
com.smartfoxserver.v2.SmartFoxServer.start(SmartFoxServer.java:266)
com.smartfoxserver.v2.Main.main(Main.java:27)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:601)
com.exe4j.runtime.LauncherEngine.launch(Unknown Source)
com.install4j.runtime.launcher.Launcher.main(Unknown Source)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

这是 AppConfig 类:

@Configuration
@ComponentScan("com.lagente.sfs2x.*")
public class AppConfig 

    @Bean
    public APIExtesion exampleExtension() 
        return new ExampleZoneExtension();
    

    @Bean
    public ExtensionConfiguration extensionConfig() 
        return new ExtensionConfiguration();
    

这里是 ZoneExtension 的 init 函数中的源代码 sn-p:

appContext = 
    new AnnotationConfigApplicationContext(AppConfig.class);

有人帮我解决吗?非常感谢。

【问题讨论】:

尝试从表达式中删除 * - "com.lagente.sfs2x.*" 我试过了,但没有成功@asg :( 【参考方案1】:

我也遇到过同样的问题,这很简单,但有点棘手。 Spring 无法加载您的配置类,因为它不在类路径中。 我想你用 sfs2x-standalone 启动 Smartfox。它不会将 SFS2X/extensions 和子目录中的 jars 添加到类路径中。

因此,如果您将代码放入 SFS2X/extensions/__lib__,则应该使用 sfs2x.bat。如果您将代码放在 SFS2X/extensions/my_extensions 之类的位置,则应编辑 sfs2x.bat 以将 my_extensions 添加到类路径中。

原来sfs2x.bat应该是

@..\jre\bin\java.exe -cp "./;lib/*;lib/jetty/lib/*;extensions/__lib__/*" -Dfile.encoding=UTF-8 -Xnoagent -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8787 com.smartfoxserver.v2.Main %1 %2

改成

@..\jre\bin\java.exe -cp "./;lib/*;lib/jetty/lib/*;extensions/__lib__/*;extensions/my_extension/*" -Dfile.encoding=UTF-8 -Xnoagent -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8787 com.smartfoxserver.v2.Main %1 %2

应该有帮助

【讨论】:

以上是关于Spring无法加载配置类的主要内容,如果未能解决你的问题,请参考以下文章

无法从 Spring Boot 应用程序中的自定义 yml 文件加载配置

Spring boot Oracle Gradle:无法加载驱动程序类:oracle.jdbc.OracleDriver

无法加载驱动程序类:在 Spring Boot 应用程序中的 org.h2.Driver

Spring载入多个配置文件加载顺序是怎么样的

Spring5IDEA运行测试类时报错:找不到或无法加载主类

Spring Cloud Kubernetes - 启用配置重新加载时 Spring Boot 无法启动