Hier ist meine Bean, die bedingt erstellt werden soll
Code: Select all
@Service
@ConditionalOnProperty(value = "polling.enabled", havingValue = "true")
public class MessageQueueService {
@Scheduled(fixedDelay = INTERVAL_MS)
public void execute() {
//sysout
}
}
-- Unser Service lädt Eigenschaften direkt von Consul (aus Legacy-Gründen) und nicht über die Spring-Umgebung
-- Ich habe die RestTemplate-Bean (unten) gehackt, um benutzerdefinierte propertyResource in die Umgebung einzufügen. Ich wusste nicht, wie ich das machen sollte, ohne eine weitere PropertySource-Bean-Instanz zu erstellen.
Code: Select all
@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();
}
}
Wenn ich @ConditionalOnProperty aus der Klasse auskommentiere, wird die Bean erstellt und die geplante Methode aufgerufen.
Jede Hilfe zur Behebung dieses Problems ist sehr willkommen!!
Vielen Dank im Voraus
Mobile version