设置 @Value 以使用 @ConfigurationProperties 前缀

时间:2021-01-14 13:14:22

标签: java spring spring-boot

我正在使用具有以下值的属性文件: com.abc.cpuUtilization.okThreshold = 0.5

我想使用以下配置类:

@Component
@ConfigurationProperties(prefix="com.abc")
public class SystemConfiguration{

  @Value("${cpuUtilization.okThreshold}")
  private Double cpuUtilizationOkThreshold;

  // getters and setters of cpuUtilizationOkThreshold
  }
}

但我得到一个例外 Could not resolve placeholder 'cpuUtilization.okThreshold'

当将 @Value 设置为:"${com.abc.cpuUtilization.okThreshold}" 时它可以工作,但它使代码看起来丑陋和繁琐。

有没有办法配置这个类,这样我就不必为 @Value 注释写整个前缀?

4 个答案:

答案 0 :(得分:0)

对于配置属性,您只需要在属性文件中添加与变量具有相同键的值。

在 application.properties 中。

com.abc.cpuUtilization.okThreshold=123

你的班级应该是:

@Component
@ConfigurationProperties(prefix="com.abc.cpuUtilization")
public class SystemConfiguration{

  private Double okThreshold;

  }
}

答案 1 :(得分:0)

Spring 配置属性扫描的工作方式类似于包扫描。

@Value 注释适用于完整的属性名称或原始 string 值。所以你设置的值应该是。 假设有 com.abc.cpu-utilization.okThreshold=0.5 属性。

  • 解决方案 1:您的 SystemConfiguration 修改 prefix 并删除 @Value

    @Getter
    @Setter
    @Configuration
    @ConfigurationProperties(prefix = "com.abc.cpu-utilization")
    public class SystemConfiguration {
       private Double okThreshold;
    }
    
  • 解决方案 2:您的 SystemConfiguration 可以指向 com.abc 并包含 cpu-utilization 中间包的内部配置:

    @Getter
    @Setter
    @Configuration
    @ConfigurationProperties(prefix = "com.abc")
    public class SystemConfiguration {
       private CpuUtilizationConfig cpuUtilization;
    }
    
    @Data
    public class CpuUtilizationConfig {
        private Double okThreshold;
    }
    

请注意,okThresholdcpuUtilization 直接反映了我们之前定义的属性命名。然后,Spring 会发挥作用 :-)

见:

答案 2 :(得分:0)

@ConfigurationProperties 最适用于所有具有相同前缀的分层属性,因此,您添加 com.abc.cpuUtilization.Your POJO 类的前缀应该像

@Configuration
@ConfigurationProperties(prefix="com.abc.cpuUtilization")
public class SystemConfiguration{

  private Double okThreshold;

  public Double getOkThreshold() {
        return okThreshold;
    }

    public void setOkThreshold(Double okThreshold) {
        this.okThreshold = okThreshold;
    }

  }
}

如果POJO中没有使用@Configuration,那么需要在Spring应用主类中添加@EnableConfigurationProperties(ConfigProperties.class),将属性绑定到POJO中。 然后你可以在 application.properties 中设置值

com.abc.cpuUtilization.okThreshold=0.5

参考:https://www.baeldung.com/configuration-properties-in-spring-boot

答案 3 :(得分:0)

首先,将您的“cpuUtilization.okThreshold”值更改为 com.abc.cpuUtilization-okThreshold = 0.5

然后在配置类中:

@Component
@ConfigurationProperties("com.abc")
public class SystemConfiguration{

  private Double cpuUtilizationOkThreshold;

  // getters and setters of cpuUtilizationOkThreshold
  }
}

尝试在不使用“前缀”和不使用 @Value 注释的情况下进行配置,它对我有用。