【问题标题】:System environment properties overriding spring boot application.properties覆盖spring boot application.properties的系统环境属性
【发布时间】:2020-10-23 08:37:53
【问题描述】:

在 Spring Boot 应用程序中,我在 application.properties 中有一个属性

spring.datasource.url: jdbc:mysql://host1:3306/test?useSSL=false&autoReconnect=true

但是,当我启动应用程序时,它正在连接到一个完全不同的数据库。

因此,当我检查 /actuator/env it url 中的 env 值时,它表明该值正在被环境属性覆盖

SPRING_DATASOURCE_URL": {
          "value": "jdbc:mysql://host2:3306/test",
          "origin": "System Environment Property \"SPRING_DATASOURCE_URL\""
}

我不知道这个环境属性是在哪里配置的。 我只希望它从我的属性文件中选择,而不是从环境中选择。有什么办法吗?

【问题讨论】:

  • 它来自您的系统检查全局导出中某处的SPRING_DATASOURCE_URL 并将其删除。
  • 您使用的是什么系统,Linux 还是 Windows?您始终可以通过 Java System 命令行参数-Dspring.datasource.url=jdbc:mysql://host1:3306/test?useSSL=false&autoReconnect=true 覆盖操作系统设置。更多关于优先级的细节在这里docs.spring.io/spring-boot/docs/2.3.4.RELEASE/reference/…
  • 我用的是mac。问题是我检查了许多可以设置全局属性的地方。而且我在任何地方都没有看到它。
  • @Michal 这只是我给出的一个被覆盖的属性的例子。在我的应用程序中,还有许多其他属性也以相同的方式被覆盖。所以手动指定它们中的每一个是很困难的。

标签: java spring macos spring-boot spring-data-jpa


【解决方案1】:

在 Spring Boot 中有 17 种设置和覆盖属性的方法,它们是有序的, 例如,jar 外的 application.properties 位于 jar 内的 application.properties 之前。

您可以搜索以所有这些方式覆盖您的属性的潜在来源- (从最强到最弱排序) - 从 Spring Boot 参考复制 - https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-配置

devtools 处于活动状态时 $HOME/.config/spring-boot 目录中的 Devtools 全局设置属性。

您的测试中的@TestPropertySource 注释。

你的测试的属性属性。在 @SpringBootTest 和用于测试应用程序特定部分的测试注释上可用。

命令行参数。

来自 SPRING_APPLICATION_JSON 的属性(嵌入在环境变量或系统属性中的内联 JSON)。

ServletConfig 初始化参数。

ServletContext 初始化参数。

来自 java:comp/env 的 JNDI 属性。

Java 系统属性 (System.getProperties())。

操作系统环境变量。

仅具有随机属性的 RandomValuePropertySource。*。

打包 jar 之外的特定于配置文件的应用程序属性(application-{profile}.properties 和 YAML 变体)。

打包在您的 jar 中的特定于配置文件的应用程序属性(application-{profile}.properties 和 YAML 变体)。

打包 jar 之外的应用程序属性(application.properties 和 YAML 变体)。

应用程序属性打包在您的 jar 中(application.properties 和 YAML 变体)。

@Configuration 类上的@PropertySource 注释。请注意,在刷新应用程序上下文之前,不会将此类属性源添加到环境中。配置某些属性(例如在刷新开始之前读取的 logging.* 和 spring.main.*)为时已晚。

默认属性(通过设置 SpringApplication.setDefaultProperties 指定)。

【讨论】:

    猜你喜欢
    • 2020-06-22
    • 2018-04-12
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 2017-01-24
    • 2019-09-18
    相关资源
    最近更新 更多