Printemps de Démarrage SpEL ConditionalOnExpression vérifier plusieurs propriétés
Question:
Comment puis-je utiliser le Printemps Langage d'Expression de vérifier que les 2 propriétés Booléennes sont vraies?
Par exemple, vérifier qu'une propriété unique est vrai, serait d'utiliser la syntaxe:
Exemple
@ConditionalOnExpression("${property.from.properties.file}")
Quelle serait la syntaxe pour la vérification de property1 == true && property2 == false
? Où les propriétés peuvent avoir des valeurs différentes.
La réponse à une question similaire: Comment vérifier deux conditions que lors de l'utilisation @ConditionalOnProperty ou @ConditionalOnExpression concatène deux chaînes et effectue une vérification de la sorte:
Concaténation Solution
@ConditionalOnExpression("'${com.property1}${com.property2}'=='value1value2'")
Que la syntaxe semble confus à quelqu'un de lire ce code et il semble comme un hacky solution. Il y a certains cas où la solution ne peut pas ainsi.
Je veux trouver la bonne façon de vérifier deux propriétés sans la concaténation des valeurs.
Remarque:
Aussi juste pour être clair, la réponse n'est pas quelque chose que vous pouvez facilement effectuer des recherches à partir de ce que j'ai vu. Il semble que ce serait vraiment une réponse simple, mais il s'avère assez difficile.
- Double Possible de Comment vérifier deux conditions que lors de l'utilisation @ConditionalOnProperty ou @ConditionalOnExpression
- cette question n'est pas acceptée de répondre et de ne pas répondre à ma question.
- "'${com.propriété1} et ${com.propriété2}'" ?
- pouvez-vous confirmer que la syntaxe fonctionne? J'ai essayé les opérateurs "&&" et "et" et j'ai eu une erreur dans les deux cas.
Vous devez vous connecter pour publier un commentaire.
Les annotations
@ConditionalOnProperty
et@ConditionalOnExpression
les deux n'ont PAS lajava.lang.annotation.Repeatable
annotation de sorte que vous ne seriez pas en mesure de simplement ajouter plusieurs annotations pour la vérification de plusieurs propriétés.La syntaxe suivante a été testé et fonctionne:
Solution pour les Deux Propriétés
Noter les points suivants:
la propriété dans le langage d'expression de déclaration
Il permet de multiples propriétés qui ont des valeurs différentes et peuvent s'étendre à de multiples propriétés.
Si vous voulez vérifier plus de 2 valeurs et encore maintenir la lisibilité, vous pouvez utiliser l'opérateur de concaténation entre les différentes conditions d'évaluation:
Solution pour plus de 2 propriétés
L'inconvénient est que vous ne pouvez pas utiliser un matchIfMissing argument que vous seriez en mesure lors de l'utilisation de la
@ConditionalOnProperty
annotation ainsi, vous devez vous assurer que les propriétés sont présents dans le .propriétés ou YAML fichiers pour tous vos profils/environnements ou simplement s'appuyer sur la valeur par défautAussi loin que je me souvienne,
Vous pouvez utiliser ce genre d'expression:
pour en savoir plus
voici la lien
si elle a été utile, merci de faire un commentaire, afin que ma confusion peut également obtenir effacée.