Spring @ConfigurationProperties работает странный, может быть, неверноJAVA

Программисты JAVA общаются здесь
Anonymous
Spring @ConfigurationProperties работает странный, может быть, неверно

Сообщение Anonymous »

работал над классами конфигурации и заметило странное поведение. Подготовлен небольшой тест для воспроизведения: < /p>

Код: Выделить всё

@Slf4j
@Configuration
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = TestInjectingProperties.class)
@TestPropertySource("classpath:test.yml")
public class TestInjectingProperties
{

@Getter
@Setter
@ToString
@Configuration
@ConditionalOnProperty("a.b")
@ConfigurationProperties("a.b")
public class AbOptionalProperties
{

private String id;

}

@Getter
@Setter
@ToString
@Configuration
@ConditionalOnProperty("c.d")
@ConfigurationProperties("c.d")
public class CdOptionalProperties
{

private String id;

}

@Getter
@Setter
@ToString
@Configuration
@ConditionalOnProperty("e.f")
@ConfigurationProperties("e.f")
public class EfOptionalProperties
{

private String g;
private String h;

}

@Getter
@Setter
@ToString
@Configuration
@ConditionalOnProperty("e.f")
@ConfigurationProperties("e.f")
public class EfgOptionalProperties
{

private String g;
private String h;

}

@Autowired(required = false)
private AbOptionalProperties abOptionalProperties;

@Autowired(required = false)
private CdOptionalProperties cdOptionalProperties;

@Autowired(required = false)
private CdOptionalProperties efOptionalProperties;

@Autowired(required = false)
private EfgOptionalProperties efgOptionalProperties;

@Test
void testProperties()
{
log.info("ab optional properties = {}", abOptionalProperties);
log.info("cd optional properties = {}", cdOptionalProperties);
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>
ab optional properties = TestInjectingProperties.AbOptionalProperties(id=null)
cd optional properties = TestInjectingProperties.CdOptionalProperties(id=null)
ef optional properties = TestInjectingProperties.CdOptionalProperties(id=null)
efg optional properties = null
Как вы можете видеть условным на свойство, может найти узлы YML, в которых нет детских узлов (например: «a.b» или «c.d»), но это не может сделать это для «e.f», потому что у него есть дети.

Подробнее здесь: https://stackoverflow.com/questions/795 ... -incorrect

Вернуться в «JAVA»