使用Spring的ApplicationContextAware容器管理,Tomcat启动出现一个或多个listeners启动失败的解决方法。

一、异常现象:

30-Dec-2024 16:56:88.562 重大 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.Standardcontext.startInternal 一个或多个listeners启动失败

原始配置及代码:

1、web.xml

配置spring-context.xml以及ContextLoaderListener

 2、spring-context.xml

配置了ApplicationContextAware实现类的bean:springContext

3、ApplicationContextAware实现类的代码SpringContext,重写destroy和setApplicationContext

 

二、原因查找与解决

1、查看pom版本依赖,跟别人正常运行的版本对比了,没有问题。

 于是使用异常log在网上各种找有没有解决方案,没找到完全一致的,于是使用AI工具通义灵码问,终于发现端倪。如下:

①、配置web.xml,跟我的配置一致,没问题,不贴图了。

②、配置spring-context.xml,这里跟我的方式就不一致了,使用的自动注册bean,启用组件扫描的方式。

③、确保你的实现类使用了@Component或类似的注解,以便Spring能够识别并管理这个Bean。 

尝试重启Tomcat,不再出异常,并且功能可以正常使用。

于是确定以上自动注册bean方法可以解决 (案一)

三、反思

为什么同样都是bean注入,自动注册的好使,而我之前的依赖注入的不好用呢。

<bean id="springContext" class="com.kevin.my.shop.commons.context.SpringContext"/>

而且通过自动注入启动成功,且功能正常使用,说明依赖注入的另外两个bean是可用的。

    <bean id="userDao" class="com.kevin.my.shop.dao.impl.UserDaoImpl"/>
    <bean id="userService" class="com.kevin.my.shop.service.impl.UserServiceImpl"/>

于是怀疑是依赖注入的bean顺序不对导致的,尝试把 springContext的Bean放置在最上面。

如下:

并且删掉@Component注解。

 再度重启Tomcat,不再出异常,并且功能可以正常使用。

 于是确定以上依赖注入bean方法也可以使用 ,要注意依赖注入bean的顺序问题(案二)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值