SpringBoot JUnit测试失败报No supported DataSource type found
问题根因分析
你遇到的两个报错分别由不同的配置错误和依赖缺失导致:
- 第一个
No supported DataSource type found报错核心原因是依赖缺失:你的pom.xml中没有引入Spring操作数据源必需的spring-boot-starter-jdbc或spring-boot-starter-data-jpa依赖,仅引入了MariaDB驱动。Spring Boot创建数据源需要依赖内置的连接池(默认HikariCP)和JDBC核心类,缺少这些组件就无法识别可用的DataSource实现。同时你配置了spring.jpa.hibernate.ddl-auto=validate参数,本身就说明你需要使用JPA能力,但没有引入对应starter。 - 第二个
No qualifying bean of type 'java.lang.String' available报错是测试类配置错误导致:你在@ContextConfiguration的classes列表中加入了DbSource.class,这个类是你自定义的普通业务类,不是Spring配置类。Spring会尝试将其作为配置类解析、实例化其定义的Bean,而DbSource的构造方法需要传入3个String类型参数,容器中找不到对应类型的Bean就会抛出该错误。 - 额外隐藏问题:
- 你pom中配置的启动类路径是
controllers.Application,但DbSourceConfig在it.unict.spring.application.configurations包下,如果主启动类没有配置包扫描路径,默认只会扫描启动类所在包及其子包,会出现找不到配置类的问题。 - 你在
DbSourceConfig中注入的数据源URL和变量名不匹配:urlUser读取的是spring.datasource.url,实际指向data库;urlData读取的是spring.datasource2.url,实际指向users库,后续运行会出现连错库的问题。 - 你自定义的
DbSource类如果没有实现javax.sql.DataSource接口,后续JPA、事务管理器等组件无法识别你定义的数据源,会出现新的报错。
- 你pom中配置的启动类路径是
修复步骤
- 补全Maven依赖
在pom.xml的dependencies节点中添加JPA starter依赖,该依赖会自动引入JDBC核心包、默认HikariCP连接池、Hibernate核心组件:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
- 修正测试类配置
删除测试类上错误的@ContextConfiguration注解,使用正确的配置指定主启动类即可,修正后的测试代码如下:
@SpringBootTest(classes = Application.class) public class TestContext { @Test void contextLoads(ApplicationContext context) { assertNotNull(context); } }
- 修正主启动类包扫描配置
检查你的Application类所在包路径,如果不在it.unict.spring.application包下,需要在@SpringBootApplication注解上明确指定扫描的根包,确保能加载到DbSourceConfig配置类:
@SpringBootApplication(scanBasePackages = "it.unict.spring") @EnableAutoConfiguration public class Application { // 原有代码不变 }
- 修正多数据源配置的细节
- 调整
DbSourceConfig中URL注入的对应关系,确保userSource连接users库、dataSource连接data库,避免连错库。 - 如果你需要自定义多数据源,配置类中
@Bean方法的返回值建议直接定义为DataSource类型,使用Spring提供的DataSourceBuilder创建实例,不要自定义未实现DataSource接口的DbSource类,否则JPA等ORM组件无法识别数据源。
- 测试环境适配(可选但推荐)
如果你后续要做Schema校验的测试,建议在test/resources目录下创建独立的测试配置文件,使用H2内存数据库执行测试,避免依赖本地启动的MariaDB实例,提升测试稳定性。
内容的提问来源于stack exchange,提问作者Discipulos
相关产品推荐
相关产品推荐

