java - Spring:使用@Validated注解时,自动装配的配置为空
问题描述
通常我使用一个类从 yml 加载所有配置,并通过自动装配配置使它们在整个应用程序中可用。这工作得很好,直到我尝试通过添加 @Validated 注释来验证配置。
如果验证失败,应用程序将无法启动,并且我收到一条消息,其中包含错误设置的属性。如果验证成功,我的自动装配配置为空,即使我可以通过调试看到正确的值是从 yml 文件中读取和设置的。
//full configuration class
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
@Component
@ConfigurationProperties(prefix = "config")
@Validated
public class ConfigurationStore {
@Valid
public MyConfiguration myConfiguration = new MyConfiguration();
public ConfigurationStore setMyConfiguration(MyConfiguration myConfiguration) {
this.myConfiguration = myConfiguration;
return this;
}
public static class MyConfiguration {
@NotBlank
public String configuredString;
public void setConfiguredString(String configuredString) {
this.configuredString = configuredString;
}
}
}
//class where autowired configuration is always null
import {package}.ConfigurationStore;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
@Configuration
@Import(ConfigurationStore.class)
public class MyConfig {
private ConfigurationStore configurationStore;
@Autowired
public MyConfig(ConfigurationStore configurationStore) {
this.configurationStore = configurationStore;
}
@Bean
public String returnIt() {
return configurationStore.myConfiguration.configuredString;
}
}
删除 @Validated 会删除验证功能。保留它会导致自动装配配置为空。我期望的是配置和验证同时工作。
解决方案
推荐阅读
- html - 如何在 ngFor 循环中使用 ngIf 循环?
- javascript - 由 webgl 在 2d 中渲染的相同 PNG 文件不如 canvas2d 平滑
- azure - 在 azure Web 服务身份验证问题上运行公共和私有图像
- list - 递归在 Haskell 中是如何工作的?- 示例合并功能
- python - 如何使用ifelse定义的函数在python中找到非线性方程的解
- google-sheets - 我需要帮助制作一个脚本来为单元格中的代码字着色
- python - 如果字符串太长,则无法从功率计获得响应
- rust - 如果 strong_count 为 1 且 weak_count 为 0,则包含 `Rc` 的`Send` 结构是否安全?
- c# - 无法使用 C# getAsync url 调用打印 JSON 响应
- python - 在推理期间从自定义 Tensorflow/Keras 层中提取中间变量 (TF 2.0)