java - 在 application.properties 中使用 spring.profile.default 时,Spring Boot 不加载默认配置文件

标签 java spring-boot spring-profiles

仅供引用:我发誓没有激活配置文件配置,例如 -D 或运行配置

目标

当应用程序在没有任何激活配置文件的情况下启动时,dev 配置文件将默认激活。

问题

我已经设置了 spring.profile.default = dev ,并且我希望 dev 配置文件被激活。但事实并非如此。

我做了什么

运行环境

Spring-Boot 版本:2.1.2 发布

我被推荐的内容

1) 如何在 Spring Boot 应用程序中使用配置文件 - https://www.javacodegeeks.com/2019/07/profiles-spring-boot-application.html#respond

这是我所做的代码

/resources/application.properties

spring.profiles.default= dev

application.environment=This is a "Default" Environment

/resources/application-dev.properties

application.environment=This is a "dev" Environment
server.port= 8082

/ProfileController.java

@RestController
@RequestMapping("/v1")
public class ProfileController {

    @Value("${application.environment}")
    private String applicationEnv;

    @GetMapping
    public String getApplicationEnv(){
        return applicationEnv;
    }
}

结果

localhost/v1 => 这是一个“默认”环境

我发现默认配置文件已正确设置为 dev

这是我的 spring 启动日志。

2019-10-16 23:17:02.926 INFO 64099 --- [ main] c.e.s.SpringbootdemoappApplication : No active profile set, falling back to default profiles: dev

为服务器端口添加另一个日志

2019-10-17 00:25:03.837 INFO 68318 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8083 (http)

我添加的原因是它似乎不是与注入(inject)相关的问题。

是时候结束这个问题了

我想要实现的第一个目标是更改默认配置文件。 从 spring 文档( https://docs.spring.io/spring/docs/4.2.0.RELEASE/spring-framework-reference/htmlsingle/#beans-definition-profiles-default )开始,可以通过在 application.properties 中设置 spring.profiles.default 来更改默认配置文件。

但这似乎是一种错误(感谢@Antoniossss)。即使我已在 application.properties 中进行了设置,并且控制台显示No active profile set,fall back to default profile: dev。 但是 dev 配置文件仍然没有激活。

我发现更改默认配置文件应该在加载 application.properties 之前完成

这意味着如果在application.properties中描述了更改默认配置文件,那就太晚了。(不知道为什么,我不明白,因为Spring中有很多层......) 如果使用 -Dspring.default.profile = dev 设置默认配置文件,则它可以正常工作。

来自https://github.com/spring-projects/spring-boot/issues/1219 :

You can't change the default profile by declaring it in a config file. It has to be in place before the config files are read.

最佳答案

问题是您在加载应用程序后传递此属性,您需要在应用程序启动时提供此属性

将其作为 JVM 参数传递

java -jar -Dspring.profiles.default=dev myproject.jar

作为环境变量传递

java -jar myproject.jar --spring.profiles.default=dev

系统变量

SPRING_PROFILES_DEFAULT=dev

关于java - 在 application.properties 中使用 spring.profile.default 时,Spring Boot 不加载默认配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58416384/

相关文章:

java - Android url Api 按环境

Java 访问器/修改器 -> 属性名称

java - Spring框架有命令行界面吗

java - 在 Spring 中,服务层总是必须是事务性的吗?

java - 在 spring boot 2.4.0 版本中包含配置文件

java - 从文件导入 JasperPrint 时出现 OutOfMemoryError

java - Tomcat - 多个 webapps 文件夹

spring-boot - Thymeleaf 装饰器不工作

java - Maven 和 spring-boot : how to specify profile(s) on spring-boot:repackage

java - 如何为同一个 Feign 客户端接口(interface)的不同配置文件切换 2 个注释