Вот мой бин, который я хочу условно создать
Код: Выделить всё
@Service
@ConditionalOnProperty(value = "polling.enabled", havingValue = "true")
public class MessageQueueService {
@Scheduled(fixedDelay = INTERVAL_MS)
public void execute() {
//sysout
}
}
- наш сервис загружает свойства непосредственно из консула (по причинам, связанным с устаревшими версиями). ), а не через среду Spring
- я взломал компонент RestTemplate (ниже), чтобы добавить в среду пользовательское свойствоResource. Я не знал, как это сделать, не создавая еще один экземпляр компонента PropertySource.
Код: Выделить всё
@Configuration
public class AppConfig {
@Autowired
ConfigurableEnvironment env;
@Bean(name = "consulProps")
public Properties properties() {
Properties consulProperties = new ConsulDriver(env.getConsulUrl()).loadProperties();
return properties;
}
@Bean
@Autowired
public RestTemplate restTemplate(@Qualifier(consulProps) Properties props) {
MutablePropertySources sources = env.getPropertySources();
sources.addFirst(pollingEnabled(props));
return new RestTemplate();
}
private MapPropertySource pollingEnabled(Properties props) {
String enabled = props.getProperty("polling.enabled"); // line 25
Map map = new HashMap();
if (StringUtils.isNotBlank(enabled)) {
map.put("polling.enabled", enabled);
}
else {
map.put("polling.enabled", "false");
}
return new MapPropertySource("polling", map);
}
@Bean
public static PropertySourcesPlaceholderConfigurer propertyConfigIn() {
return new PropertySourcesPlaceholderConfigurer();
}
}
если я закомментирую @ConditionalOnProperty из класса, компонент будет создан и запланированный метод будет звонил.
Любая помощь в исправлении ситуации будет очень признательна!
Заранее спасибо
Подробнее здесь: https://stackoverflow.com/questions/508 ... ot-project