【问题标题】:Spring Boot Property file precedenceSpring Boot 属性文件优先级
【发布时间】:2021-06-17 01:09:46
【问题描述】:

在我的 Spring Boot 程序中,由于加载时的属性值错误,我遇到了失败。特别是,它使用 DB2 hibernate 方言,但它没有在我认为我使用的属性文件中定义。

假设没有注解,Spring 在哪里寻找属性文件?是的,我知道它通常位于 src/main/resources/application.properties

如果我的测试用例中有一个属性怎么办?它会忽略主要的那个并使用测试中的那个吗?还是从主版本开始,让测试版本覆盖它适用的主版本?

应用程序配置文件会影响使用的属性文件吗?有些人在 main 和 test 中使用相同的 application.properties 文件名。

如果我确实有一个带有类路径位置的 TestSource 注释,它还会在其他地方添加一些东西吗?

最后,我怎样才能让 Spring 告诉我它在哪里寻找属性,而不仅仅是其中一个?

【问题讨论】:

  • 文件名不是application.property,而是application.properties
  • 使用配置文件的目的是根据环境使用单独的应用程序属性,所以配置文件确实会影响使用的属性文件
  • 如果您定义了配置文件,那么它将查找在活动配置文件中引用的属性文件,否则它将查找application.properties
  • @sanjeevRm 我更正了拼写错误。问完这个问题后,我意识到可以在属性文件中指定一个配置文件。
  • spring boot 考虑属性来源的顺序有据可查here。您可以指定默认值并以多种方式覆盖它们。这是一个 maven 约定,您将 application.properties 放在 src/test/resources 下,用于测试,而不是 src/main/resources 中的那个。运行测试时使用哪个属性文件取决于构建工具或 IDE。

标签: java spring-boot spring-properties


【解决方案1】:

@Woodsman

可以在 src/main/resources/ 文件夹的 spring 应用程序中的每个配置文件/环境中使用许多设置

application-dev.properties
application-local.properties
application-onlytests.properties
application-prd.properties
application.properties

连字符后的名称将是spring得到的名称配置文件

例如:application-{myenviroment}.properties

当你启动spring应用程序时,默认使用application.properties

您可以通过以下方式之一告诉 spring 使用传递环境的特定属性:

  • spring.profiles.active=prd 放入application.properties 文件中
  • 启动spring app时传参--spring.profiles.active=local
  • 在命令行上运行你的 jar java -jar myjar.jar --spring.profiles.active=dev
  • 在您的机器/docker/container SET SPRING_ACTIVES_PROFILE=local 中设置环境变量
  • 还有其他方法可以在 bean 上使用注释、传递 jvm 参数等

如果您需要在特定配置(变量、数据库、设置)中运行测试,可以通过将使用哪个 .properties

@ExtendWith(SpringExtension.class)
@AutoConfigureMockMvc
@SpringBootTest
@TestPropertySource(locations = "classpath:application-onlytests.properties")
public class RunTest_from_onlytests_properties {

    @Autowired
    private MockMvc mockMvc;
    
    @Test // org.junit.jupiter.api.Test
    public void test() throws Exception{
      // ...
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-15
    • 2018-08-10
    • 2016-01-21
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多