[英]Java EE with eclipse and Tomcat: Driver not found
我正在研究Java EE項目(下面的配置),並且遇到了似乎是經常出現的異常: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
。
我正在使用Eclipse,嵌入式Tomcat 7和Maven,即使找到了用於測試的驅動程序,Tomcat也找不到。
我搜索了一些答案1 , 2和3 ,但建議不明確:建議改變mysql-connector-java
來provided
,並手動復制到服務器的依賴(還不清楚)。
但是我不明白為什么我應該排除部署的依賴項( provided
作用域)並手動添加它,這不是矛盾的嗎?
閱讀了Maven文檔之后 ,我覺得運行環境需要依賴項,因此compile
范圍是最合適的。
就像您看到的那樣,我正在嘗試弄清楚這些事情,因此我寧願有一個解釋而不是一個魔術解決方案。
配置:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.26</version>
</dependency>
數據庫屬性:
URL = jdbc:mysql://127.0.0.1:3306/XXX-db?zeroDateTimeBehavior=convertToNull
USERBD = XXX
PASSWORDBD = XXX
DRIVER = com.mysql.jdbc.Driver
屬性加載:
static {
try {
Properties databaseProperties = new Properties();
InputStream inputStream = DatabaseConnection.class.getClassLoader()
.getResourceAsStream(PROPERTIES_FILE);
if (inputStream != null) {
databaseProperties.load(inputStream);
} else {
throw new FileNotFoundException(
"property file '" + PROPERTIES_FILE + "' not found in the classpath");
}
Class.forName(databaseProperties.getProperty("DRIVER"));
USERBD = databaseProperties.getProperty("USERBD");
PASSWORDBD = databaseProperties.getProperty("PASSWORDBD");
URL = databaseProperties.getProperty("URL");
} catch (ClassNotFoundException | IOException e) {
e.printStackTrace();
}
}
Tomcat 7 JNDI文檔為您提供了答案:將它們放在Tomcat / lib文件夾中。
Apache Tomcat隨附的JRE內存泄漏預防偵聽器通過在Tomcat啟動期間觸發驅動程序掃描來解決此問題。 默認情況下啟用。 這意味着將僅掃描偵聽器可見的庫,例如$ CATALINA_BASE / lib中的庫,以查找數據庫驅動程序。 如果要考慮禁用此功能,請注意,該掃描將由使用JDBC的第一個Web應用程序觸發,從而導致在重新加載此Web應用程序以及其他依賴此功能的Web應用程序時失敗。
因此,在其WEB-INF / lib目錄中具有數據庫驅動程序的Web應用程序不能依賴服務提供程序機制,而應顯式注冊驅動程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.