Laden von Propertie Dateien

Um eine Properties-File in Java zu laden gibt es verschiedene Moeglichkeiten. Gehen wir davon aus das in dem Package “de.firma.projekt.resource” die Datei “my.properties” liegt. Dann kann die Properties geladen werden, indem die folgenden Methode mit dem Uebergabeparameter “de/firma/projekt/resource/my.properties” aufgerufen wird.

public Properties loadProp(String name){
    URL url = ClassLoader.getSystemClassLoader().getSystemResource(name);
    Properties prop = new Properties();
    try {
       prop.load(url.openStream());
    } catch (Exception e) {
       e.printStackTrace();
    }
    return prop;
}

Die Methode funktioniert wunderbar. Zumindest in einer Stand-Alone-Applikation. Wenn die Methode mit dem gleichen Uebergabeparameter in einem Servlet-Container aufgerufen wird, liefert sie eine leere Properties-File zurueck weil die url “null” ist. In einem Servlet-Container muesste folgender Parameter uebergeben werden, damit es funktioniert: “/WEB-INF/classes/de/firma/projekt/resource/my.properties”.
Die Methode funktioniert also nicht in jedem Context. Das habe ich Heute schmerzvoll gelernt. Als ich meine JUnit-Tests habe laufen lassen, hat alles wunderbar funktioniert. Ein paar Minuten spaeter funktionierte der gleiche Code auf einem Servlet-Container auf einmal nicht mehr.
Hier ist meiner verbesserte Methode die in jedem Context funktioniert.

private Properties loadProperties(final String name){
   Properties result = null;
   try {
      ClassLoader loader = Thread.currentThread ().getContextClassLoader ();
      if (loader == null)
         loader = ClassLoader.getSystemClassLoader();
      InputStream in = loader.getResourceAsStream (name);
      if (in != null){
         result = new Properties ();
         result.load (in); // can throw IOException
      }
   } catch (IOException ioe) {
      log.error("I/O ERROR in loadProperties ", ioe);
   } catch (Exception e) {
      log.error("Exception ERROR in loadProperties ", e);
   }
   if (result == null){
      log.info("could not load Properties from: " + name);
   } else {
      log.info("load Properties from: " + name);
   }
   return result;
}

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s