Printemps @Valeur de l'annotation de ne pas utiliser les valeurs par défaut de la propriété n'est pas présent
Je suis en train d'utiliser @Valeur de l'annotation dans les paramètres d'un constructeur comme suit:
@Autowired
public StringEncryptor(
@Value("${encryptor.password:\"\"}") String password,
@Value("${encryptor.algorithm:\"PBEWithMD5AndTripleDES\"}") String algorithm,
@Value("${encryptor.poolSize:10}") Integer poolSize,
@Value("${encryptor.salt:\"\"}") String salt) {
...
}
Lorsque le fichier de propriétés est présent sur le chemin de la classe, les propriétés sont chargés parfaitement et le test s'exécute bien. Cependant lorsque je l'ai supprimer le fichier de propriétés du chemin de classe, je me serais attendu, les valeurs par défaut ont été utilisés, par exemple poolSize serait fixé à 10 ou un algorithme pour PBEWithMD5AndTripleDES cependant, ce n'est pas le cas.
L'exécution du code par le biais d'un débogueur (qui ne fonctionnerait qu'après un changement de @Value("${encryptor.poolSize:10}") Integer poolSize
à @Value("${encryptor.poolSize:10}") String poolSize
comme il était à l'origine NumberFormatExceptions) je trouve que les valeurs par défaut ne sont pas définies et les paramètres sont dans la forme de:
poolSize = ${encryptor.poolSize:10}
ou
algorithm = ${encryptor.algorithm:"PBEWithMD5AndTripleDES"}
plutôt que de l'attendre
poolSize = 10
ou
algorithm = "PBEWithMD5AndTripleDES"
Basé sur SPR-4785 la notation de la forme ${mon.propriété:myDefaultValue} devrait fonctionner. Pourtant, il ne se passe pas pour moi!
Merci
Vous devez vous connecter pour publier un commentaire.
Peut-être de l'initialisation de la propriété de l'espace réservé configurer échoue en raison d'avoir raté le fichier de propriétés, de sorte que les espaces ne sont pas résolus. Vous pouvez le configurer pour ignorer manqué fichiers comme suit (si vous utilisez
context
espace de noms pour le configurer):Aussi, vous n'avez pas besoin de
"..."
autour de valeurs par défaut.PropertySourcePlaceholderConfigurer
:propertySourcesPlaceholderConfigurer.setIgnoreResourceNotFound(true);
ignorer-ressource introuvable="true" n'est pas nécessaire pour les paramètres par défaut pour être ramassé. Le point de spécifier la valeur par défaut doit être utilisée que si la propriété n'est pas trouvé n'importe où.
Je pense que la dernière phrase dans la réponse précédente points pour le problème - incorrect EL que vous devez avoir fourni à l'origine, mais ensuite retiré de l'exemple. Le fait que vous avez été d'obtenir la conversion de format exceptions points à ça aussi. Normalement, le Printemps sera automatiquement convertir les Chaînes de caractères approprié "standard" type Java, et si vous fournissez votre propre mise en œuvre de Printemps, Service de Conversion de vos objets personnalisés ainsi - aussi longtemps que votre service de conversion est défini dans le contexte de l'application.
"ignorer les-ressources-pas-trouvé" est utile lorsque vous êtes à l'injection de propriétés via XML sans défaut et ne voulez pas que le conteneur pour lancer une exception de l'instanciation de la fève dans le cas où aucune propriété n'est trouvée. Dans de tels cas, les propriétés du bean sera initialisé avec le Java par défaut, par exemple, les valeurs null bof objets, 0s pour des primitifs valeurs numériques, etc.
Dans mon cas, la résolution des valeurs de propriété (et les valeurs par défaut) ne fonctionne pas dans le test, où j'ai utiliser une annotation en fonction de la configuration. Il s'est avéré que j'ai dû ajouter un
PropertySourcesPlaceholderConfigurer
de sorte que les propriétés réellement résolu. Il a été expliqué dans le PropertySource Annotation JavaDoc:La suite fait le tour:
Et si vous souhaitez ajouter des propriétés individuelles: