如果配置文件处于活动状态,spring.application.name 属性 in application.yaml 将被提取为 null

spring.application.name property in application.yaml is fetched as null if profile is active

我有一个指定服务名称的 application.yaml 文件:

spring:
  application:
    name: "my-microservice"

现在,当我尝试在我的代码中使用 @Value("spring.application.name") 获取它时,我能够成功地做到这一点。

但我还使用了一个“开发”配置文件,我为其创建了一个单独的应用程序-dev.yaml,但我没有在这个 yaml 中指定 spring.application.name。 现在,当我尝试 运行 我的代码时,@Value 注释给了我一个空值。 我认为 application-dev.yaml 未指定的字段应该使用 application.yaml 填充,但显然这没有发生。 我是否应该将默认的每个公共字段复制到开发人员的应用程序文件中?或者还有其他办法吗?感谢任何帮助,谢谢 :)

好的,我找到问题了。 spring 确实会读取所有配置文件的默认 application.yaml 属性(除非它们已被配置文件的应用程序文件覆盖) 但就我而言,我试图在静态字段上使用 @Value 注释。

  @Value("${spring.application.name}")
  private static String applicationName;

这导致我的代码出现空异常。从字段中删除静态上下文对我有用。

  1. 你需要使用 Spring 表达语言,它说我们应该把它写成
    @Value("${spring.application.name}")
    private String appName;
  1. 如果密钥不存在于 yaml/yml 或属性文件
  2. 中,则为默认值
    @Value("${spring.application.name: defaultValue}") 
    private String appName;
  1. 最后一种获取值的方法是使用环境对象
   @Autowired  
   private Environment environment;
       
   String appName = environment.get("spring.application.name");