当前位置: 首页 > news >正文

@SpringBootConfiguration重复加载报错

Junit单元测试@Test启动报错,@SpringBootConfiguration注解重复问题排查:

@SpringBootApplication 注解的 exclude 属性用于排除特定的自动配置类,而不是用于排除主配置类本身。因此,不能通过 exclude 属性来排除主配置类的加载。

正确的使用方式

如果你想排除某些自动配置类,可以使用 exclude 属性。例如:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class PortalApplication {public static void main(String[] args) {SpringApplication.run(PortalApplication.class, args);}
}

排除主配置类的加载

如果你确实需要在某些情况下排除主配置类的加载,可以考虑以下几种方法:

1. 使用不同的配置类

你可以创建不同的配置类,并在不同的环境中使用不同的配置类。例如,可以创建一个测试配置类,并在测试中使用它。

// 主配置类
@SpringBootApplication
public class PortalApplication {public static void main(String[] args) {SpringApplication.run(PortalApplication.class, args);}
}// 测试配置类
@SpringBootApplication
public class TestApplication {public static void main(String[] args) {SpringApplication.run(TestApplication.class, args);}
}

在测试类中使用 @SpringBootTest 注解来指定测试配置类:

import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.junit.runner.RunWith;
import org.junit.Test;@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestApplication.class)
public class PortalApplicationTest {@Testpublic void contextLoads() {// 测试内容}
}
2. 使用 @TestConfiguration

如果你只需要在测试中排除某些配置,可以使用 @TestConfiguration 注解来创建测试专用的配置类。

import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;@TestConfiguration
public class TestConfig {@Beanpublic SomeBean someBean() {return new SomeBean();}
}

在测试类中使用 @Import 注解来导入测试配置类:

import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.context.annotation.Import;
import org.junit.runner.RunWith;
import org.junit.Test;@RunWith(SpringRunner.class)
@SpringBootTest(classes = PortalApplication.class)
@Import(TestConfig.class)
public class PortalApplicationTest {@Testpublic void contextLoads() {// 测试内容}
}

总结

  • @SpringBootApplicationexclude 属性:用于排除特定的自动配置类,而不是用于排除主配置类本身。
  • 不同的配置类:可以创建不同的配置类,并在不同的环境中使用不同的配置类。
  • @TestConfiguration:用于创建测试专用的配置类,并在测试中使用。

相关文章:

  • 层次分析法(评价类问题)
  • NLP——文本预处理
  • Vue脚手架的安装(超详细篇,保姆级教程)
  • 【web3.0】Web3 开发教程与代码资源:探索如何在Web3项目中开发应用
  • VBA之Excel应用第二章第三节:InputBox函数对话框
  • Io 35
  • VUE实现TAB切换不同页面
  • 【Vue】vue3 中使用 ResizeObserver 监听元素的尺寸宽度变化
  • 洛谷练习(8.6)
  • Maven实战.插件
  • 深入SpringBoot:SpringCache的集成与使用
  • SQL注入之sqli-labs靶场第一关
  • sql server 通过 sql查询今天、本周、上周、本月、上月、今年、去年的时间范围
  • forwardRef和useImperativeHandle到底能做啥
  • DataWhale AI夏令营-英特尔-阿里天池LLM Hackathon
  • 「译」Node.js Streams 基础
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • CSS实用技巧干货
  •  D - 粉碎叛乱F - 其他起义
  • javascript 哈希表
  • JavaScript设计模式系列一:工厂模式
  • learning koa2.x
  • mysql_config not found
  • MySQL主从复制读写分离及奇怪的问题
  • react-native 安卓真机环境搭建
  • ReactNativeweexDeviceOne对比
  • vue的全局变量和全局拦截请求器
  • vue--为什么data属性必须是一个函数
  • 数据科学 第 3 章 11 字符串处理
  • 通过git安装npm私有模块
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 写给高年级小学生看的《Bash 指南》
  • 以太坊客户端Geth命令参数详解
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 自定义函数
  • nb
  • 组复制官方翻译九、Group Replication Technical Details
  • ​比特币大跌的 2 个原因
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #每日一题合集#牛客JZ23-JZ33
  • $().each和$.each的区别
  • (Git) gitignore基础使用
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (详细文档!)javaswing图书管理系统+mysql数据库
  • (转) Android中ViewStub组件使用
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .net core 外观者设计模式 实现,多种支付选择
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .NET 中的轻量级线程安全
  • .Net(C#)常用转换byte转uint32、byte转float等