работал над классами конфигурации и заметило странное поведение. Подготовлен небольшой тест для воспроизведения: < /p>
@Slf4j
@ExtendWith(SpringExtension.class)
@TestPropertySource("classpath:test.yml")
class TestInjectingProperties
{
@Configuration
@ConfigurationProperties("a.b")
public class AbProperties
{
}
@Configuration
@ConditionalOnProperty("a.b")
@ConfigurationProperties("a.b")
public class AbOptionalProperties
{
}
@Configuration
@ConfigurationProperties("c.d")
public class CdProperties
{
}
@Configuration
@ConditionalOnProperty("c.d")
@ConfigurationProperties("c.d")
public class CdOptionalProperties
{
}
@ToString
@Configuration
@ConfigurationProperties("e.f")
public class EfProperties
{
private String g;
}
@Configuration
@ConditionalOnProperty("e.f")
@ConfigurationProperties("e.f")
public class EfOptionalProperties
{
private String g;
}
@Configuration
@ConditionalOnProperty("e.f.g")
@ConfigurationProperties("e.f")
public class EfgOptionalProperties
{
private String g;
}
@Autowired(required = false)
private AbProperties abProperties;
@Autowired(required = false)
private AbOptionalProperties abOptionalProperties;
@Autowired(required = false)
private CdProperties cdProperties;
@Autowired(required = false)
private CdOptionalProperties cdOptionalProperties;
@Autowired(required = false)
private CdProperties efProperties;
@Autowired(required = false)
private CdOptionalProperties efOptionalProperties;
@Autowired(required = false)
private EfgOptionalProperties efgOptionalProperties;
@Test
void testProperties()
{
log.info("ab properties = {}", abProperties);
log.info("ab optional properties = {}", abOptionalProperties);
log.info("cd properties = {}", cdProperties);
log.info("cd optional properties = {}", cdOptionalProperties);
log.info("ef properties = {}", efProperties);
log.info("ef optional properties = {}", efOptionalProperties);
log.info("efg optional properties = {}", efgOptionalProperties);
}
}
< /code>
тест на содержимое файла YML: < /p>
a.b:
c.d: null
e.f.g: abc
< /code>
Вывод: < /p>
INFO lms.common.validation.jsr303.TestInjectingProperties -- ab properties = null
INFO lms.common.validation.jsr303.TestInjectingProperties -- ab optional properties = null
INFO lms.common.validation.jsr303.TestInjectingProperties -- cd properties = null
INFO lms.common.validation.jsr303.TestInjectingProperties -- cd optional properties = null
INFO lms.common.validation.jsr303.TestInjectingProperties -- ef properties = null
INFO lms.common.validation.jsr303.TestInjectingProperties -- ef optional properties = null
INFO lms.common.validation.jsr303.TestInjectingProperties -- efg optional properties = null
< /code>
Я ожидал, что пружина сможет внедрить некоторые из них, но все они были нулевыми.
На мой взгляд, все они должны быть введены, потому что в файле YAML есть соответствующие узлы.
.>
Подробнее здесь: https://stackoverflow.com/questions/795 ... -incorrect