Fichier de propriétés dans spring mvc
J'ai un fichier de propriétés avec des paires clé-valeur:
key1=value1
key2=value2
Maintenant, dans mon contrôleur, je veux imprimer directement la valeur d'une propriété de fichier (bien sûr après le chargement du fichier de propriétés à l'aide de web.xml /app-servlet.xml), comme:
System.out.printl(${key1});
Est-il possible de faire cela?
Si non, je veux créer une interface avec toutes constant variable pour lire les valeurs de propriété de fichier. Comment dois-je faire??
public interface MyConstants
{
@Value("${key1}")
public static final KEY_1="";
}
Mais comme prévu uniquement chaîne vide est attribué.
Comment puis-je résoudre ce problème? Ou, quelle est la meilleure façon d'utiliser la propriété de fichiers pour récupérer les valeurs? Merci à l'avance...
- voir si cela aide les stackoverflow.com/questions/2704099/...
- Hmm dans sa réponse, est la solution qui devrait vous intéresser: stackoverflow.com/questions/1771166/...
Vous devez vous connecter pour publier un commentaire.
C'est possible! Vous devez utiliser le
util
espace de noms dans votreapp-servlet.xml
comme ci-dessous:Et votre
controller
est quelque chose commemise à jour pour une autre façon:
Vous pouvez également utiliser l'espace de noms
context
Contrôleur, déclarer une propriété comme ci-dessous
util
espace de noms avec une annotation@Value("#{props.key1}")
ci-dessusprivate String foo;
private String foo
; mais il retourne${pros.key1}
Il y a deux raisons pourquoi avoir une interface pour "MyConstants' au lieu d'une classe est incorrect :
1) le Printemps ne peut pas injecter des valeurs à une interface qui n'a pas de mise en œuvre. Tout simplement parce que vous ne serez pas en mesure d'instancier l'interface. Rappelez-vous, le Printemps est juste une usine et il peut jouer qu'avec des "choses" qui peuvent être instanciés.
2) une Autre raison est que le fait d'avoir une interface pour le stockage de vos constantes est un anti-modèle en lui-même. Ce n'est pas ce que les interfaces sont conçues pour. Vous pouvez vous reporter à la Constante de l'interface anti-modèle.
http://en.wikipedia.org/wiki/Constant_interface
La création d'un "Constantes" de la classe /de l'interface est une approche souvent utilisée, mais je pense que c'est une mauvaise approche. Il crée un étrange attelage où les classes à partir de différentes couches de votre système subitement selon l'une des Constantes de la classe. Il devient également difficile de comprendre en regardant les constantes de la classe, comme à la constante est utilisé par qui? Ne pas mentionner le fait qu'il se moque complètement abstraction. Vous avez soudainement une des constantes de la classe qui contient des informations sur le message d'erreur à afficher sur la page jsp, le nom d'utilisateur et le mot de passe d'un tiers de l'api, taille du pool de threads, etc.. tout en un "je sais tout" classe
Afin d'éviter une constante de classe /interface aussi loin que possible. Regardez vos contrôleurs /services, si un service de classe a besoin d'une configuration particulière de la valeur que vous souhaitez exposés dans un fichier de propriétés, et l'injecter dans la classe et l'enregistrer comme une instance de niveau constant. Cette conception est beaucoup plus propre à partir d'une abstraction point de vue, il contribue également à l'unité de tester cette classe facilement.
Au Printemps, vous pouvez créer un handle d'un fichier de propriétés comme suit:
Comme le code l'indique, vous pouvez mentionner plusieurs fichiers de propriété ici. Après vous faites cela, vous pouvez faire référence à une clé de la mentionnée fichier de propriétés, d'ailleurs, dans le contexte de la sorte:
La
SomeClass
exemple, ici a une propriété appeléeimageUrl
qui est maintenant injecté avec la valeur mentionnée à l'encontre de lacategories.images
clé de la propriété fichier appelémy-application.properties
Espère que cette aide.
code
<bean id="xx" class="com.xx.SomeClass" p:imageUrl="${catégories.images}"/>code
exprimé dans une classe Java plutôt que d'interminables valeurs xml.