簡體   English   中英

帶有Eclipse和Tomcat的Java EE:未找到驅動程序

[英]Java EE with eclipse and Tomcat: Driver not found

我正在研究Java EE項目(下面的配置),並且遇到了似乎是經常出現的異常: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

我正在使用Eclipse,嵌入式Tomcat 7和Maven,即使找到了用於測試的驅動程序,Tomcat也找不到。

我搜索了一些答案123 ,但建議不明確:建議改變mysql-connector-javaprovided ,並手動復制到服務器的依賴(還不清楚)。

但是我不明白為什么我應該排除部署的依賴項( 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM