Kann nicht geladen werden .Eigenschaften in der Anwendung für den Tomcat
Ich brauche zum schreiben eine web-Anwendung, die verbindet zur Datenbank und liest verbindungen-Eigenschaften aus .Eigenschaften-Datei.
Ich benutze Maven und ich möchte einige schreiben unit Tests für meine app.
Um zu testen, Klassen, arbeiten mit Datenbank ich meine .properties-Datei src/main/resources und test/main/resources und schrieb den folgenden code für das Lesen von Eigenschaften:
package util;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import org.apache.log4j.Logger;
/**
*
* @author proger
*/
public class ProgrammSettings {
private static Logger logger = Logger.getRootLogger();
private static String propertiesPath = "program.settings.properties";
private static Properties props;
public static String getProperty(String key) {
if (props == null)
loadProperties();
return props.getProperty(key);
}
public static void setResourcesFilePath(String path) {
propertiesPath = path;
}
private static void loadProperties() {
InputStream propOut = null;
try {
//URL url = ClassLoader.getSystemResource(propertiesPath);
propOut = ClassLoader.getSystemClassLoader().getResourceAsStream(propertiesPath); //new FileInputStream(url.getFile());
props = new Properties();
props.load(propOut);
} catch (Exception ex) {
//Logger.getLogger(ProgrammSettings.class.getName()).log(Level.SEVERE, null, ex);
String errorMessage = "Error during properties file reading. Path to file: '" +
propertiesPath + "'";
logger.error(errorMessage, ex);
throw new RuntimeException(errorMessage, ex);
} finally {
try {
if (propOut != null)
propOut.close();
} catch (IOException ex) {
logger.error("Error during closing stream from properties file", ex);
}
}
}
}
Wollte ich den gleichen code gearbeitet, sowohl für tests und app-Klassen, so habe ich gelesen-Eigenschaften-Datei aus dem classPath.
Alle meine tests übergeben und meine .properties-Datei verpackt und in den Krieg ziehen, die von Maven. Aber wenn ich meine App von Netbeans das ich erhalten:
java.lang.NullPointerException
java.util.Properties$LineReader.readLine(Properties.java:435)
java.util.Properties.load0(Properties.java:354)
java.util.Properties.load(Properties.java:342)
util.ProgrammSettings.loadProperties(ProgrammSettings.java:49)
util.ProgrammSettings.getProperty(ProgrammSettings.java:33)
dataacess.AbstractDataMapper.loadDriver(AbstractDataMapper.java:58)
dataacess.AbstractDataMapper.<init>(AbstractDataMapper.java:41)
dataacess.UserMapper.<init>(UserMapper.java:25)
servlets.UserRegistration.processRequest(UserRegistration.java:86)
servlets.UserRegistration.doPost(UserRegistration.java:132)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
Wie kann ich es beheben? Vielen Dank im Voraus
Ich habe die standart-Verzeichnis-Struktur für Maven-Projekt.
InformationsquelleAutor Ivan Mushketyk | 2010-12-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ort
program.settings.properties
imwebapps/appname/WEB-INF/classes
Und Sie können verwenden Sie eine einfachere Linie
ProgrammSettings.class.getResourceAsStream(..)
(also nicht die system-classloader, sondern die aktuellen classloader)siehe Aktuelles
Danke. SystemClassLoader nicht laden, was ich brauche. Nur ProgrammSettings.class ClassLoader, der kann es tun.
so funktioniert es jetzt? Wenn ja, sind Sie eingeladen zum markieren der Antwort als angenommen 🙂
InformationsquelleAutor Bozho