我在撰寫書城專案時,按照老師的方法撰寫完JDBCUtils工具類之后在本地進行工具類測驗沒有問題,當放在服務器上運行使用注冊功能呼叫JDBCUtils工具類時總是報空指標例外,麻煩各位大佬看一下是怎么回事?
下面是代碼:
public class JdbcUtils {
private static DruidDataSource dataSource;
static {
try {
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");
Properties properties = new Properties();
properties.load(is);
dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 獲取資料庫連接池中的連接
* @return 如果回傳null說明獲取失敗
*/
public static Connection getConnection() {
Connection conn = null;
try {
conn = dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
/*
關閉連接,放回資料庫連接池
*/
public static void close(Connection conn) {
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
例外如下:
java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Properties.java:434)
at java.util.Properties.load0(Properties.java:353)
at java.util.Properties.load(Properties.java:341)
at com.ply.utils.JdbcUtils.<clinit>(JdbcUtils.java:23)
at com.ply.dao.impl.BaseDao.queryForOne(BaseDao.java:43)
at com.ply.dao.impl.UserDaoImpl.queryUserByUsername(UserDaoImpl.java:10)
at com.ply.service.impl.UserServiceImpl.existsUsername(UserServiceImpl.java:28)
at com.ply.web.RegistServlet.doPost(RegistServlet.java:28)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:615)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:818)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1626)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
at com.ply.utils.JdbcUtils.<clinit>(JdbcUtils.java:23) 這一行我覺得指明了是我的代碼中 properties.load(is);這一句有問題,我的包目錄如下圖:
uj5u.com熱心網友回復:
應該是沒有找到檔案,你用什么方式(maven 構建/eclipse 匯出)打的war包?把檔案放在src下試試uj5u.com熱心網友回復:
可以試試在你的組態檔jdbc.properties加上以下內容。timeBetweenEvictionRunsMillis=600
initialSize=50
maxActive=100
maxWait=3000
這個問題應該是沒有從連接池獲取到連接導致controller、service、dao都出現了問題。
uj5u.com熱心網友回復:
1,進入classes目錄,查看有沒有那個組態檔2,使用telnet命令看看ip埠通不通
3,嘗試使用絕對路徑加載組態檔,且看代碼:
/**
* 獲得工程的classpath根目錄
*
* @return String
*/
public static String classpath() {
try {
return Class.forName(View.class.getName()).getResource("/").getPath();// 隨便找一個自定義類的class都行
} catch (Exception e) {
log.error(e + "", e);
throw new RuntimeException(e + "");
}
}
InputStream is = new FileInputStream(new File(classpath() + "/jdbc.properties"));
用這種寫法試試
uj5u.com熱心網友回復:
服務器是什么作業系統?換成:
InputStream is = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
還有你這個檔案里在服務器發布目錄下存在么? 其內容是什么?
uj5u.com熱心網友回復:
我不知道你本地問什么成功的明顯路徑是由問題的。
路徑應該是 com/py/jdbc.properties
uj5u.com熱心網友回復:
按你的寫法jdbc.properties該檔案應該在src檔案夾下。uj5u.com熱心網友回復:
謝謝各位大佬的回復,問題已經解決了,用的是四樓的方法,組態檔的確是放在了src下,可能是因為我的IDEA的包結構顯示有問題,所以才會誤導了大家我的路徑有問題,再次感謝。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/26033.html
標籤:Web 開發
上一篇:關于SVF 通過 csv出力pdf,里面的xml的路徑的問題
下一篇:Java怎么生成dll檔案被呼叫
