Spring @ ConditionalOnProperty — как заставить это работать

#spring-boot

#spring-загрузка

Вопрос:

У меня есть этот компонентный класс, и если свойство accounting.generalServiceConfig.accountPageSize находится в application.properties, то запись журнала должна быть записана в файл журнала. Но с этим классом в основе это не работает. Если я добавлю аннотацию @Bean в метод printAccountPageSize и верну, например, new Object(), то это сработает. Есть ли возможность заставить это работать с классом так, как будто он находится внизу?

 @Component
public class ConditionalPropertyChecker extends AbstractService {

    protected final Logger logger = LoggerFactory.getLogger(getClass());

    public ConditionalPropertyChecker() {
    }

    @ConditionalOnProperty(name = "accounting.generalServiceConfig.accountPageSize")
    public void printAccountPageSize() {
        logger
            .info("the accountPageSize is set in application.properties");
    }
}
  

Ответ №1:

@ConditionalOnProperty предназначен для классов @Configuration, создающих @Bean.

Вы можете сделать это:

 @Component
public class ConditionalPropertyChecker extends AbstractService {

    protected final Logger logger = LoggerFactory.getLogger(getClass());

    public ConditionalPropertyChecker(@Value("${accounting.generalServiceConfig.accountPageSize}") Integer pageSize) {
      if (pageSize) {
        logger.info("the accountPageSize is set in application.properties");
      }
    }
}
  

Комментарии:

1. Это касается не только классов конфигурации. Совершенно нормально комментировать свой @Component класс с помощью @ConditionalOnProperty .