【错误异常】使用Debug模式启动项目Spring初始化配置中的Bean会存在执行两次的情况

这里说一下我遇到的情况,有时候写项目的时候突然前面还好好的,突然写了一些代码之后,启动不起来了。然后分析之后发现有些Bean对象在Config配置中被执行了两次,第一次有值,第二次莫名就读取不到值了,然后导致项目启动不起来。

这里我就介绍一下我遇到该问题的一个解决方式,大家可以尝试一下,大家跟我情况类似,可以顺着我的思路去操作一下。

在大家的项目里看一下是否引入了Spring的单元测试依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
</dependency>

我的项目启动在Debug模式下启动执行两遍就是因为这个。我的猜测大概是可能是我的test包下也写了测试用例,导致底层在Debug模式下会特殊执行一次SpringBootTest类似的东西,如果有大神能具体知道什么原理,可以评论里跟我说一下,感激不尽。

解决办法
1.去掉test依赖

哈哈,我相当于说废话了,大家如果真加了这个依赖,肯定是有需要,咋可能去掉,不过去掉是肯定可以。

2.第一种test包下别写测试类

在不去掉test依赖的情况下,不要在test包下写任何的测试类。小伙伴看到这里肯定心想:“丫的,妈妈生的,你搁这废话呢?”。

3.跳过测试

我们在idea中找到setting里面,搜索Runner 然后勾上skip tests就行了,这样启动的时候人家就不会去看你test底下的玩意了。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java程序,可以使用Spring框架提供的BeanPostProcessor接口来查询Bean的加载顺序。BeanPostProcessor是一个接口,它提供了两个方法:postProcessBeforeInitialization和postProcessAfterInitialization,这两个方法分别在Bean初始化之前和之后被调用。可以通过实现BeanPostProcessor接口,并在这两个方法输出Bean的名称和加载顺序,来查询Bean的加载顺序。具体步骤如下: 1. 创建一个类,实现BeanPostProcessor接口。 2. 在实现类重写postProcessBeforeInitialization和postProcessAfterInitialization方法,并在方法输出Bean的名称和加载顺序。 3. 将实现类注册到Spring容器,让Spring容器自动调用实现类的方法。 示例代码如下: ```java @Component public class BeanPostProcessorImpl implements BeanPostProcessor { private static final Logger logger = LoggerFactory.getLogger(BeanPostProcessorImpl.class); @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { logger.info("Bean [{}] 开始初始化。", beanName); return bean; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { logger.info("Bean [{}] 初始化完成。", beanName); return bean; } } ``` 在上面的代码,我们实现了BeanPostProcessor接口,并在其两个方法输出了Bean的名称和初始化状态。在输出的日志,我们可以根据Bean的初始化状态来判断Bean的加载顺序。例如,如果两个Bean的初始化状态依次为"开始初始化"和"初始化完成",则第一个Bean的加载顺序在第二个Bean之前。 另外,可以通过在Spring配置文件设置debug属性来输出Bean的加载顺序。具体方法是在Spring配置文件添加以下内容: ```xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd" default-lazy-init="false" debug="true"> <!-- 配置Bean --> </beans> ``` 在上面的配置debug属性设置为true,表示输出调试信息,包括Bean的加载顺序。这种方法比较简单,但是输出大量的调试信息,很难看清Bean的加载顺序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杰肥啊

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值