Spring基于范围的默认配置文件选择

Posted

技术标签:

【中文标题】Spring基于范围的默认配置文件选择【英文标题】:Spring Default Profile Selection Based on Scope 【发布时间】:2015-10-19 11:55:15 【问题描述】:

我的应用程序有一个嵌入式数据库作为“测试”依赖项(Maven 测试),但是当您想在没有任何 -D 开关的情况下启动应用程序时,这会导致异常,因为在 application.yml 中声明了 jdbc 驱动程序(请参阅下面)。

是否可以根据范围(即运行时或测试)设置数据源?或者更好的是,您可以在没有任何 -D 开关的情况下更改默认配置文件(例如 -Dspring.profiles.active=test)吗?

这可能看起来微不足道,但是对于我们的团队来说,您可以在 IDE 中成功运行测试感到困惑,但是当您尝试“运行应用程序”时它会失败,除非您设置 -D 开关。

datasource:
  url: jdbc:h2

spring:
  profiles: profile1

datasource:
  url: jdbc:postgresql

【问题讨论】:

【参考方案1】:

如果您仅将嵌入式数据库用于测试,那么您可以在文件夹src/test/resources/ 中放置一个 application.properties(或 .yml),您可以在其中放置所有用于测试运行的属性。至少这对我有用。因此,您无需将生产属性放入配置文件中,它们会在您运行应用程序时使用。

【讨论】:

【参考方案2】:

    application.yml移动到src/test/resources/

    您可以使用

    设置默认配置文件

    datasource.url=jdbc:h2  =>

    datasource:
      url: jdbc:h2  
    ---

    spring:
      profiles: profile1

    datasource:
      url: jdbc:postgresql

【讨论】:

我需要根据我是否正在运行测试来设置默认配置文件,不幸的是这不起作用。你知道根据我是在运行测试还是正常运行来设置配置文件的方法吗?

以上是关于Spring基于范围的默认配置文件选择的主要内容,如果未能解决你的问题,请参考以下文章

当在命令行中未指定配置文件时,Spring Boot 集成测试无法获取默认配置文件并引发错误

Spring Boot的配置文件

黑马_13 Spring Boot:04.spring boot 配置文件

spring的Bean的作用范围的配置

Spring -- Spring配置文件详解(Bean标签的基本配置(id,class)/ 范围配置 / 不同范围时的对象的创建时期 / Bean生命周期配置(生命周期方法) )

使用Java,Spring进行基于配置文件,可切换的JSON缩小