2009-09-01 10 views
9

Ich versuche also, meinem Projekt einige Fähigkeiten hinzuzufügen, um benutzerdefinierte Eigenschaften in meinem Implementierungsartefakt zuzulassen - eine einfache Schlüssel: Wertdatei .properties. Ich stelle die service.properties Datei inWie wird die Eigenschaftendatei in Google App Engine geladen?

war/WEB-INF/my-service.properties 

Und in meinem ServiceImpl.java Konstruktor Ich habe folgendes:

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); 

Alle Instanzen von Objekt URL sind null. Ich weiß, dass mir etwas absolut Offensichtliches fehlt, aber ich brauche ein zweites Paar Augen. Grüße.

EDIT:

Ah, es scheint, ich wurde als Standard verwirrt GAE Projekt eine logging.properties Datei in/Krieg schafft. Von der Google App Engine documentation:

Das App Engine-Java-SDK enthält eine Template-Datei namens logging.properties im Verzeichnis appengine-java-sdk/config/user /. Um es zu verwenden, kopieren Sie die Datei in Ihr Verzeichnis WEB-INF/classes (oder an anderer Stelle in der WAR-Datei) und anschließend die Systemeigenschaft java.util.logging.config.file in "WEB-INF/classes/logging.properties" (oder Welchen Pfad Sie auch wählen, relativ zum Anwendungsstamm). Sie können die Systemeigenschaften wie folgt in der Datei atengine-web.xml festlegen:

+0

Ich nehme an, es ist ein Tippfehler in Ihrer Frage und nicht Ihre App, aber Sie geben an, dass Ihre Datei "service.properties" heißt, aber propertiesFileName auf "my-service.properties" gesetzt ist! –

+0

@ Todd: Ja, es ist ein Tippfehler, ich werde es korrigieren. –

Antwort

9

Versuchen Sie, die service.properties in WEB-INF/classes einzufügen. Dann sollte es zugänglich sein nur mit:

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

Wissen Sie, warum ich das "/" am Anfang des Pfades entfernen musste, damit es funktioniert? – Mike

0

denke ich, was Sie benötigen, so etwas wie dieses:

String filePath = servletContext.getRealPath ("/ WEB-INF/Ansichten /") + „/ "+ mav.getViewName() +" .vm "; FileInputStream in = neuer FileInputStream (filePath);

Ich bekomme den ServletContext von Frühjahr: @Autowire ServletContext.

0

Wie Mike in seinem Kommentar erwähnt jsight die Antwort, es funktionierte für mich, wenn ich

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

(den ersten Schrägstrich entfernt), nachdem die Datei im WEB-INF/classes platzieren.