У меня есть внешний источник свойств (скажем, файл .properties) с переменными среды, такими как:
MY_PROP1=1A
MY_PROPS_PROP1=1B
MY_PROPOBJ_PROP1=1C
И я хочу инициировать @ConfigurationProperties
с такими:
@ConfigurationProperties("my")
@Setter
@Getter
class MyProperties {
private String prop1;
private Props props = new Props();
private PropsObj propsObj = new PropsObj();
@Setter
@Getter
class Props {
private String prop1;
}
@Setter
@Getter
class PropsObj {
private String prop1;
}
}
Все работает нормально, когда я устанавливаю их в качестве переменных среды при запуске приложения. Но когда я обрабатываю их с пользовательским SystemEnvironmentPropertySource
в EnvironmentPostProcessor
, свойство prop1
составного объекта propsObj
не разрешается (значение null
):
class MyEnvPostProcessor implements EnvironmentPostProcessor {
@Override
public void postProcessEnvironment(ConfigurableEnvironment env, SpringApplication app) {
env.getPropertySources().addLast(
new SystemEnvironmentPropertySource(
"myPropertySource1",
// simplified, the map will be filled from a properties file etc:
Map.of("MY_PROP1", "1A", "MY_PROPS_PROP1", "1B", "MY_PROPOBJ_PROP1", "1C")));
}
}
Почему расслабленное связывание не работает в этом случае?
Я использую Spring Boot 2.2.2.RELEASE