J'utilise Spring Boot et dispose de deux services très similaires que j'aimerais configurer dans mon application.yml
.
La configuration ressemble à peu près à ceci:
serviceA.url=abc.com
serviceA.port=80
serviceB.url=def.com
serviceB.port=8080
Est-il possible de créer une classe annotée avec @ConfigurationProperties
et de définir le préfixe au point d'injection?
par exemple.
@Component
@ConfigurationProperties
public class ServiceProperties {
private String url;
private String port;
// Getters & Setters
}
puis dans les services eux-mêmes:
public class ServiceA {
@Autowired
@SomeFancyAnnotationToSetPrefix(prefix="serviceA")
private ServiceProperties serviceAProperties;
// ....
}
Malheureusement, je n'ai trouvé aucun élément dans la documentation concernant une telle fonctionnalité ... Merci beaucoup pour votre aide!
J'ai réalisé presque la même chose que celle que vous essayez ... d'abord. Enregistrez d'abord les propriétés de chaque haricot.
@Bean
@ConfigurationProperties(prefix = "serviceA")
public ServiceProperties serviceAProperties() {
return new ServiceProperties ();
}
@Bean
@ConfigurationProperties(prefix = "serviceB")
public ServiceProperties serviceBProperties() {
return new ServiceProperties ();
}
et au service (ou quelque part où utilisera des propriétés), mettez un @Qualifier et spécifiez quelle propriété sera automatiquement câblée.
public class ServiceA {
@Autowired
@Qualifier("serviceAProperties")
private ServiceProperties serviceAProperties;
}
L'exemple Javvanos a parfaitement fonctionné, à l'exception de la validation JavaBean.
J'ai eu une annotation @NotNull sur l'une des propriétés:
public class ServiceProperties {
@NotNull
private String url;
private String port;
// Getters & Setters
}
En conséquence, le démarrage de l'application a échoué avec le message d'erreur suivant:
***************************
APPLICATION FAILED TO START
***************************
Description:
Binding to target ch.sbb.hop.commons.infrastructure.hadoop.spark.SparkJobDeployerConfig@730d2164 failed:
Property: url
Value: null
Reason: may not be null
Action:
Update your application's configuration
Après avoir supprimé l'annotation, l'application démarre avec la liaison de propriété correcte. En conclusion, je pense qu’il ya un problème avec la validation JavaBean qui n’obtient pas l’instance correctement initialisée, peut-être en raison de l’absence de proxy sur les méthodes de configuration.