解决Error creating bean with name ‘XXXX‘ defined in URL

遇到了一个神奇的bug,在开发环境能好好运行的jar,到生产环境启动的时候报Error creating bean with name 'XXXX' defined in URL的异常,并且每次都是报的同一个类找不到,试了各种方法都没能解决,网上也找了很多资料基本无用,异常如下。

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2023-02-21 10:07:21.541 ERROR 29664 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'nettyExecuter' defined in URL [jar:file:/D:/XinAo/3-dataHandler/DataHandler-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/com/photon/core/DataHandler/Netty/NettyExecuterImpl.class]: Instantiation of bean failed; nested exception is java.lang.StackOverflowError
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1320) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1214) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:879) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878) ~[spring-context-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~[spring-context-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) ~[spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) [spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE]
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) [spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) [spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) [spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE]
	at com.photon.core.DataHandler.DataHandlerApplication.main(DataHandlerApplication.java:24) [classes!/:0.0.1-SNAPSHOT]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_171]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_171]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_171]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_171]
	at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49) [DataHandler-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
	at org.springframework.boot.loader.Launcher.launch(Launcher.java:108) [DataHandler-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
	at org.springframework.boot.loader.Launcher.launch(Launcher.java:58) [DataHandler-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
	at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88) [DataHandler-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
Caused by: java.lang.StackOverflowError: null
	at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.8.0_171]
	at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[na:1.8.0_171]
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[na:1.8.0_171]
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) ~[na:1.8.0_171]
	at java.net.URLClassLoader.access$100(URLClassLoader.java:73) ~[na:1.8.0_171]
	at java.net.URLClassLoader$1.run(URLClassLoader.java:368) ~[na:1.8.0_171]
	at java.net.URLClassLoader$1.run(URLClassLoader.java:362) ~[na:1.8.0_171]
	at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_171]
	at java.net.URLClassLoader.findClass(URLClassLoader.java:361) ~[na:1.8.0_171]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_171]
	at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:151) ~[DataHandler-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_171]
	at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.8.0_171]
	at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[na:1.8.0_171]
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[na:1.8.0_171]
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) ~[na:1.8.0_171]
	at java.net.URLClassLoader.access$100(URLClassLoader.java:73) ~[na:1.8.0_171]
	at java.net.URLClassLoader$1.run(URLClassLoader.java:368) ~[na:1.8.0_171]
	at java.net.URLClassLoader$1.run(URLClassLoader.java:362) ~[na:1.8.0_171]
	at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_171]
	at java.net.URLClassLoader.findClass(URLClassLoader.java:361) ~[na:1.8.0_171]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_171]
	at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:151) ~[DataHandler-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_171]
	at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.8.0_171]
	at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[na:1.8.0_171]
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[na:1.8.0_171]
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) ~[na:1.8.0_171]
	at java.net.URLClassLoader.access$100(URLClassLoader.java:73) ~[na:1.8.0_171]
	at java.net.URLClassLoader$1.run(URLClassLoader.java:368) ~[na:1.8.0_171]
	at java.net.URLClassLoader$1.run(URLClassLoader.java:362) ~[na:1.8.0_171]
	at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_171]
	at java.net.URLClassLoader.findClass(URLClassLoader.java:361) ~[na:1.8.0_171]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_171]
	at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:151) ~[DataHandler-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_171]
	at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.8.0_171]
	at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[na:1.8.0_171]
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[na:1.8.0_171]
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) ~[na:1.8.0_171]
	at java.net.URLClassLoader.access$100(URLClassLoader.java:73) ~[na:1.8.0_171]
	at java.net.URLClassLoader$1.run(URLClassLoader.java:368) ~[na:1.8.0_171]
	at java.net.URLClassLoader$1.run(URLClassLoader.java:362) ~[na:1.8.0_171]
	at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_171]
	at java.net.URLClassLoader.findClass(URLClassLoader.java:361) ~[na:1.8.0_171]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_171]
	at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:151) ~[DataHandler-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_171]
	at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.8.0_171]
	at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[na:1.8.0_171]
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[na:1.8.0_171]
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) ~[na:1.8.0_171]
	at java.net.URLClassLoader.access$100(URLClassLoader.java:73) ~[na:1.8.0_171]
	at java.net.URLClassLoader$1.run(URLClassLoader.java:368) ~[na:1.8.0_171]
	at java.net.URLClassLoader$1.run(URLClassLoader.java:362) ~[na:1.8.0_171]
	at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_171]
	at java.net.URLClassLoader.findClass(URLClassLoader.java:361) ~[na:1.8.0_171]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_171]
	at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:151) ~[DataHandler-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_171]
	at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.8.0_171]
	at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[na:1.8.0_171]
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[na:1.8.0_171]
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) ~[na:1.8.0_171]
	at java.net.URLClassLoader.access$100(URLClassLoader.java:73) ~[na:1.8.0_171]
	at java.net.URLClassLoader$1.run(URLClassLoader.java:368) ~[na:1.8.0_171]
	at java.net.URLClassLoader$1.run(URLClassLoader.java:362) ~[na:1.8.0_171]
	at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_171]
	at java.net.URLClassLoader.findClass(URLClassLoader.java:361) ~[na:1.8.0_171]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_171]
	at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:151) ~[DataHandler-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_171]
	at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.8.0_171]
	at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[na:1.8.0_171]
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[na:1.8.0_171]
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) ~[na:1.8.0_171]
	at java.net.URLClassLoader.access$100(URLClassLoader.java:73) ~[na:1.8.0_171]
	at java.net.URLClassLoader$1.run(URLClassLoader.java:368) ~[na:1.8.0_171]
	at java.net.URLClassLoader$1.run(URLClassLoader.java:362) ~[na:1.8.0_171]
	at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_171]
	at java.net.URLClassLoader.findClass(URLClassLoader.java:361) ~[na:1.8.0_171]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_171]
	at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:151) ~[DataHandler-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_171]
	at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.8.0_171]
	at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[na:1.8.0_171]
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[na:1.8.0_171]
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) ~[na:1.8.0_171]
	at java.net.URLClassLoader.access$100(URLClassLoader.java:73) ~[na:1.8.0_171]
	at java.net.URLClassLoader$1.run(URLClassLoader.java:368) ~[na:1.8.0_171]
	at java.net.URLClassLoader$1.run(URLClassLoader.java:362) ~[na:1.8.0_171]
	at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_171]
	at java.net.URLClassLoader.findClass(URLClassLoader.java:361) ~[na:1.8.0_171]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_171]
	at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:151) ~[DataHandler-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_171]
	at io.netty.util.ConstantPool.<init>(ConstantPool.java:32) ~[netty-all-4.1.45.Final.jar!/:4.1.45.Final]
	at io.netty.util.AttributeKey$1.<init>(AttributeKey.java:27) ~[netty-all-4.1.45.Final.jar!/:4.1.45.Final]
	at io.netty.util.AttributeKey.<clinit>(AttributeKey.java:27) ~[netty-all-4.1.45.Final.jar!/:4.1.45.Final]
	at com.photon.core.DataHandler.Netty.NettyExecuter.<clinit>(NettyExecuter.java:16) ~[classes!/:0.0.1-SNAPSHOT]
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_171]
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_171]
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_171]
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_171]
	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:203) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1312) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
	... 25 common frames omitted

经过多次猜测和尝试,终于发现原因。原来是由于一个服务器跑了多个项目,资源不够用,所以每个jar包都设置了启动参数,最终是原因启动参数中给该jar包的资源不足,修改了启动参数后,顺利运行起来

### 解决 Spring Boot 创建 `serverProperties` Bean 错误 当遇到创建名为 `serverProperties` 的 Bean 发生错误的情况时,通常是因为依赖注入顺序或配置文件中的某些设置不正确。为了有效解决问题,可以考虑以下几个方面: 对于确保特定组件按序初始化的问题,在应用启动类中通过调整自动装配的优先级来控制加载顺序是一个常见方法[^5]。 如果问题是由于资源链策略引起的,则应检查应用程序属性配置是否合理。例如,启用静态资源处理链并指定路径模式可能会影响其他功能模块的行为[^3]。 另外,数据库连接池的数据源定义也可能是潜在原因。确认数据源配置无误非常重要,特别是驱动程序名称、URL 和凭证等参数要与实际环境匹配[^4]。 针对此问题的一个解决方案是在项目结构内添加自定义逻辑以延迟 `serverProperties` Bean 的实例化直到所有必要的前置条件都已满足为止。具体实现方式如下所示: ```java @Configuration public class AppConfig { @Autowired private ApplicationContext applicationContext; @Bean(name = "serverProperties") public ServerProperties serverProperties() { // 延迟初始化直至上下文中存在所需的服务注册表和其他必要组件 while (!applicationContext.containsBean("eurekaServiceRegistry")) { try { Thread.sleep(100); } catch (InterruptedException e) { throw new RuntimeException(e); } } return new ServerProperties(); } } ``` 上述代码片段展示了如何利用循环等待机制确保在创建 `serverProperties` Bean 之前先完成对 Eureka Service Registry 的初始化过程。当然这只是一个示例方案,实际情况还需要根据具体的业务场景和技术栈做适当修改。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值