Java 无法在Tomcat的应用程序中加载.properties
Java 无法在Tomcat的应用程序中加载.properties,java,maven-2,tomcat,servlets,classpath,Java,Maven 2,Tomcat,Servlets,Classpath,我需要编写一个web应用程序来连接数据库并从.properties文件中读取连接属性 我使用Maven,我想为我的应用程序编写一些单元测试 为了测试使用数据库的类,我将.properties文件放在src/main/resources和test/main/resources中,并编写了以下读取属性的代码: package util; import java.io.IOException; import java.io.InputStream; import java.util.Properti
我需要编写一个web应用程序来连接数据库并从.properties文件中读取连接属性
我使用Maven,我想为我的应用程序编写一些单元测试
为了测试使用数据库的类,我将.properties文件放在src/main/resources和test/main/resources中,并编写了以下读取属性的代码:
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);
}
}
}
}
我希望测试和应用程序类都能使用相同的代码,所以我从类路径读取属性文件。
我所有的测试都通过了,我的.properties文件被Maven打包到war中。但当我从Netbeans运行我的应用程序时,我收到:
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)
java.lang.NullPointerException
java.util.Properties$LineReader.readLine(Properties.java:435)
load0(Properties.java:354)
load(Properties.java:342)
util.ProgrammSettings.loadProperties(ProgrammSettings.java:49)
util.ProgrammSettings.getProperty(ProgrammSettings.java:33)
DataAccess.AbstractDataMapper.loadDriver(AbstractDataMapper.java:58)
AbstractDataMapper。(AbstractDataMapper.java:41)
UserMapper.(UserMapper.java:25)
servlets.UserRegistration.processRequest(UserRegistration.java:86)
servlets.UserRegistration.doPost(UserRegistration.java:132)
javaservlet.http.HttpServlet.service(HttpServlet.java:637)
javaservlet.http.HttpServlet.service(HttpServlet.java:717)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
我怎样才能修好它?提前感谢您在
webapps/appname/WEB-INF/classes
您可以使用一个更简单的行
programsettings.class.getResourceAsStream(..)
(即不是系统类加载器,而是当前类加载器)您可以编辑问题中的目录结构吗?我有Maven project.Maven的标准目录结构,在构建期间将program.settings.properties放入.war中。在部署和解包之后.properties文件正好位于webapps/appname/WEB-INF/classes中。但我还是有同样的错误。谢谢。SystemClassLoader没有加载我需要的内容。只有ProgrammSettings.class类加载器可以执行此操作。