2009-09-01 6 views
9

Donc j'essaye d'ajouter une certaine capacité à mon projet pour autoriser des propriétés définies par l'utilisateur dans mon artefact de déploiement - un simple key: value .properties file. Je placer le fichier dans service.propertiesComment charger un fichier de propriétés dans Google App Engine?

war/WEB-INF/my-service.properties 

Et dans mon constructeur ServiceImpl.java j'ai les suivantes:

String propertiesFileName = "my-service.properties"; 

URL propertyURL = ClassLoader.getSystemResource(propertiesFileName); 
URL propertyURL2 = this.getClass().getClassLoader().getResource(propertiesFileName); 
URL propertyURL3 = this.getClass().getClassLoader().getResource("WEB-INF/" + propertiesFileName); 
URL propertyURL6 = this.getClass().getClassLoader().getResource(
     "E:/Projects/eclipse-workspace/projectName/war/WEB-INF/" + propertiesFileName); 

Toutes les instances d'URL de la propriété sont nuls. Je sais qu'il me manque quelque chose d'absolument évident, mais j'ai besoin d'une seconde paire d'yeux. Cordialement.

EDIT:

Ah, il semble que je ne comprenais pas que le projet par défaut GAE crée un fichier logging.properties dans/guerre. À partir du Google App Engine documentation:

Le SDK Java App Engine inclut un fichier modèle logging.properties dans le répertoire appengine-java-sdk/config/user /. Pour l'utiliser, copiez le fichier dans votre répertoire WEB-INF/classes (ou ailleurs dans le fichier WAR), puis la propriété système java.util.logging.config.file dans "WEB-INF/classes/logging.properties" (ou quel que soit le chemin que vous choisissez, par rapport à la racine de l'application). Vous pouvez définir les propriétés du système dans le fichier appengine-web.xml, comme suit:

+0

Je suppose que c'est une faute de frappe dans votre question plutôt que votre application, mais vous déclarez que votre fichier est appelé "service.properties" et pourtant propertiesFileName est défini sur "my-service.properties"! –

+0

@Todd: Oui, c'est une faute de frappe, je vais le corriger. –

Répondre

9

Essayez de placer le service.properties dans WEB-INF/classes. Ensuite, il doit être accessible seulement avec:

this.getClass().getClassLoader().getResourceAsStream("/filename.properties"); 
+0

Savez-vous pourquoi, pour moi, je devais enlever le "/" au début du chemin pour que ça marche? – Mike

0

Je pense que ce que vous aurez besoin est quelque chose comme ceci:

Chaîne filePath = servletContext.getRealPath ("/ WEB-INF/vues /") + «/"+ mav.getViewName() +" .vm "; FileInputStream in = nouveau FileInputStream (filePath);

Je reçois le servletContext du printemps: @Autowire ServletContext.

0

Comme Mike mentionné dans son commentaire à jsight de la réponse, il a travaillé pour moi si je

this.getClass().getClassLoader().getResourceAsStream("filename.properties"); 

(supprimé la première barre oblique) après avoir placé le fichier dans WEB-INF/classes.

Questions connexes