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

SpringBootTest运行时spring前缀配置被忽略 H2数据库配置不生效问题

SpringBootTest H2文件型数据库配置不生效解决方案

核心根因

你遇到的spring前缀配置不生效、默认启动内存H2的问题,本质是两个原因:

  1. 测试类导入的DatabaseConfig自定义了DataSource实例,优先级高于Spring Boot自动装配的数据源,但你的自定义DataSource没有绑定配置文件前缀,所以spring.datasource开头的配置不会作用到该数据源上
  2. IDE提示配置呈灰色,是因为IDE没有识别到这些spring前缀配置被引用,本质也是自定义数据源没有绑定配置前缀导致的

分步解决

  • 第一步:修改DatabaseConfig类中的自定义数据源配置,增加@ConfigurationProperties注解绑定配置前缀,示例代码如下:
@Bean("h2.testDataSource")
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource h2TestDataSource() {
    // 直接使用DataSourceBuilder创建实例,连接池相关属性会自动从配置文件注入
    return DataSourceBuilder.create().build();
}

注意:如果你的自定义DataSource里硬编码了jdbcUrl、用户名、密码等参数,要把这些硬编码内容全部删除,否则配置文件的参数会被硬编码值覆盖。

  • 第二步:移除启动类上多余的@PropertySource(value = "classpath:application.properties")注解
    Spring Boot默认会自动加载src/test/resources下的application.properties配置,额外加该注解反而可能打乱配置加载优先级,引发异常。

  • 第三步:确认配置加载生效
    如果修改后还是启动内存H2,可在测试类中增加如下代码打印配置,确认配置是否正确加载:

@Autowired
private Environment environment;

@Test
public void checkConfig() {
    // 打印的结果如果是你配置的文件路径,说明配置已经正常加载
    System.out.println("当前加载的datasource.url:" + environment.getProperty("spring.datasource.url"));
}

如果打印结果为内存H2地址,可在@SpringBootTest注解中显式指定配置文件路径:

@SpringBootTest(classes = { Perscel3SumoBackendTestApplication.class }, 
        properties = "spring.config.location=classpath:application.properties")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:51:03