Comment conditionnellement déclarer Bean lorsque plusieurs profils ne sont pas actifs?
Dans mon Spring-Boot-App je veux conditionnellement déclarer un Bean, selon (onu)chargé de printemps-profils.
La conditon:
Profile "a" NOT loaded
AND
Profile "b" NOT loaded
Ma solution (qui fonctionne):
@Bean
@ConditionalOnExpression("#{!environment.getProperty('spring.profiles.active').contains('a') && !environment.getProperty('spring.profiles.active').contains('b')}")
public MyBean myBean(){/*...*/}
Est-il plus élégant (et moins) de façon à expliquer cette condition?
En particulier, je veux me débarrasser de l'utilisation de Printemps Langage d'Expression ici.
OriginalL'auteur Mike Boddin | 2016-02-16
Vous devez vous connecter pour publier un commentaire.
Depuis le Printemps 5.1 (incorporé au Printemps de Démarrage 2.1) il est possible d'utiliser un profil d'expression à l'intérieur du profil de la chaîne d'annotation. Donc:
Dans Printemps 5.1 (Printemps Boot 2.1) et au-dessus de c'est aussi simple que:
Dans Printemps 4.x et 5.0.x:
Il existe de nombreuses approches pour ce Printemps versions, chacune d'elles a ses avantages et inconvénients. Quand il n'y a pas beaucoup de combinaisons pour couvrir personnellement, j'aime @Stanislav répondre avec le
@Conditional
annotation.D'autres approches peuvent être trouvés dans cette questions similaires:
Printemps Profil - Comment inclure ET de l'état pour l'ajout de 2 profils?
Printemps: Comment le faire ET dans les Profils?
OriginalL'auteur f-CJ
Si vous avez un profil unique, vous pouvez simplement utiliser un
@Profile
annotation avec l'opérateur not. Il accepte également de plusieurs profils, mais avec leOR
condition.Donc, la solution alternative est d'utiliser un
Condition
avec le@Conditionnel
annotation. Comme:Et ensuite annoter votre méthode avec elle, comme:
Condition
. Je vais juste attendre un certain temps avant que j'accepte cette réponse. Peut-être qu'il vient d'une autre suggestion qui est encore plus élégant 😉 (Mais je ne le pense pas)J'ai essayé même ci-dessus, mais pour une raison quelconque, il est ignorant @Conditionnelle d'annotation. Toute suggestion?
OriginalL'auteur Stanislav
Je préfère cette solution qui est plus détaillé mais toujours bien pour les deux profils:
OriginalL'auteur willerr
Malheureusement je n'ai pas de solution plus courte pour vous, mais si c'est approprié dans votre cas, afin de créer les mêmes haricots pour chaque profil, vous pouvez envisager l'approche suivante.
a
ETb
chargés, puis leMyBean
est chargé à deux reprises dans ce cas, et généralement, nous ne voulons pas de ce comportement. La deuxième chose, c'est que ce n'est pas une solution à ma question. Lorsque les deux profils ne sont pas chargés ensuite leMyBean
ne doivent pas être déclarés.À l'aide de
@ConditionalOnMissingBean
comme cela est dangereux. Pour être sûr, il doit être utilisé uniquement sur l'auto-configuration des classesMerci pour vos commentaires, les gars. J'ai utilisé à l'aide de profils comme des grappes de l'environnement liés à la configuration des propriétés, comme 'dev', 'test', etc. Vraiment, cette approche ne peut pas être utilisé dans le cas où les deux profils sont chargés.
OriginalL'auteur dmytro