我正在使用具有以下值的属性文件:
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
注释写整个前缀?
答案 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;
}
请注意,okThreshold
和 cpuUtilization
直接反映了我们之前定义的属性命名。然后,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 注释的情况下进行配置,它对我有用。