2009-09-01 11 views
9

Por lo tanto, intento agregar cierta capacidad a mi proyecto para permitir propiedades definidas por el usuario en mi artefacto de implementación: una simple clave: valor .properties. Me colocar el archivo en service.properties¿Cómo cargar el archivo de propiedades en Google App Engine?

war/WEB-INF/my-service.properties 

Y en mi constructor ServiceImpl.java Tengo el siguiente:

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

Todas las instancias de la propiedad URL son nulos. Sé que me estoy perdiendo algo absolutamente obvio, pero necesito un segundo par de ojos. Saludos.

EDIT:

Ah, parece que estaba confundido como predeterminado proyecto GAE crea un archivo en logging.properties/guerra. Del Google App Engine documentation:

El SDK Java de App Engine incluye un archivo logging.properties de plantilla, en el directorio appengine-java-sdk/config/user /. Para usarlo, copie el archivo en su directorio WEB-INF/classes (o en otro lugar en el WAR), luego la propiedad del sistema java.util.logging.config.file a "WEB-INF/classes/logging.properties" (o cualquiera que sea la ruta que elija, relativa a la raíz de la aplicación). Puede establecer las propiedades del sistema en el archivo appengine-web.xml, de la siguiente manera:

+0

Supongo que es un error ortográfico en su pregunta en lugar de su aplicación, pero declara que su archivo se llama "service.properties" pero propertiesFileName está establecido en "my-service.properties"! –

+0

@Todd: Sí, es un error tipográfico, lo corregiré. –

Respuesta

9

Intente poner service.properties en WEB-INF/classes. Entonces debería ser accesible sólo con:

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

¿Sabes por qué necesito eliminar el "/" al inicio de la ruta para que funcione? – Mike

0

Creo que lo que se necesita es algo como esto:

cadena rutaArchivo = servletContext.getRealPath ("/ WEB-INF/views /") + "/ "+ mav.getViewName() +" .vm "; FileInputStream in = new FileInputStream (filePath);

Obtengo el servletContext de la primavera: @Autowire ServletContext.

0

Como Mike mencionó en su comentario a jsight s respuesta, que trabajó para mí si he utilizado

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

(retirado de la primera barra) después de colocar el archivo en WEB-INF/classes.