2010-12-05 88 views
1


我需要編寫一個連接到數據庫並從.properties文件讀取連接屬性的Web應用程序。
我使用Maven,我想爲我的應用程序編寫一些單元測試。
要測試與數據庫的作品,我把我的.properties文件爲src /主/資源和測試/主/資源並寫了下面的代碼讀取屬性的類:無法在Tomcat的應用程序中加載.properties

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

我想同樣的代碼工作無論是測試和應用程序類,所以我從classPath讀取屬性文件。 我的所有測試都通過,我的.properties文件被Maven打包成戰爭。但是當我從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) 

我該如何解決?謝謝你在前進

+0

你可以請編輯您的目錄結構,你的問題 – 2010-12-05 18:43:14

+0

我有Maven項目的標準目錄結構。 – 2010-12-05 19:22:36

回答

1

廣場program.settings.propertieswebapps/appname/WEB-INF/classes

你也可以使用一個簡單的線ProgrammSettings.class.getResourceAsStream(..)(即不是系統類加載器,但目前的類加載器)

相關問題