You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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就会抛出该错误。
  • 额外隐藏问题:
    1. 你pom中配置的启动类路径是controllers.Application,但DbSourceConfig在it.unict.spring.application.configurations包下,如果主启动类没有配置包扫描路径,默认只会扫描启动类所在包及其子包,会出现找不到配置类的问题。
    2. 你在DbSourceConfig中注入的数据源URL和变量名不匹配:urlUser读取的是spring.datasource.url,实际指向data库;urlData读取的是spring.datasource2.url,实际指向users库,后续运行会出现连错库的问题。
    3. 你自定义的DbSource类如果没有实现javax.sql.DataSource接口,后续JPA、事务管理器等组件无法识别你定义的数据源,会出现新的报错。
修复步骤
  1. 补全Maven依赖
    在pom.xml的dependencies节点中添加JPA starter依赖,该依赖会自动引入JDBC核心包、默认HikariCP连接池、Hibernate核心组件:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
  1. 修正测试类配置
    删除测试类上错误的@ContextConfiguration注解,使用正确的配置指定主启动类即可,修正后的测试代码如下:
@SpringBootTest(classes = Application.class)
public class TestContext {
    @Test
    void contextLoads(ApplicationContext context) {
        assertNotNull(context);
    }
}
  1. 修正主启动类包扫描配置
    检查你的Application类所在包路径,如果不在it.unict.spring.application包下,需要在@SpringBootApplication注解上明确指定扫描的根包,确保能加载到DbSourceConfig配置类:
@SpringBootApplication(scanBasePackages = "it.unict.spring")
@EnableAutoConfiguration
public class Application {
    // 原有代码不变
}
  1. 修正多数据源配置的细节
  • 调整DbSourceConfig中URL注入的对应关系,确保userSource连接users库、dataSource连接data库,避免连错库。
  • 如果你需要自定义多数据源,配置类中@Bean方法的返回值建议直接定义为DataSource类型,使用Spring提供的DataSourceBuilder创建实例,不要自定义未实现DataSource接口的DbSource类,否则JPA等ORM组件无法识别数据源。
  1. 测试环境适配(可选但推荐)
    如果你后续要做Schema校验的测试,建议在test/resources目录下创建独立的测试配置文件,使用H2内存数据库执行测试,避免依赖本地启动的MariaDB实例,提升测试稳定性。

内容的提问来源于stack exchange,提问作者Discipulos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 19:42:15