第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

為了防止內(nèi)存泄漏,jdbc驅(qū)動程序已強(qiáng)制取消注冊。

為了防止內(nèi)存泄漏,jdbc驅(qū)動程序已強(qiáng)制取消注冊。

尚方寶劍之說 2019-06-18 10:32:10
為了防止內(nèi)存泄漏,jdbc驅(qū)動程序已強(qiáng)制取消注冊。當(dāng)我運(yùn)行我的web應(yīng)用程序時(shí),我會收到這條消息。它運(yùn)行的很好,但我在關(guān)機(jī)期間收到了這條消息。嚴(yán)重:Web應(yīng)用程序注冊了JBDC驅(qū)動程序[oracle.jdbc.driver.OracleDriver],但在Web應(yīng)用程序停止時(shí)未能將其注銷。為了防止內(nèi)存泄漏,JDBC驅(qū)動程序被強(qiáng)制取消注冊。任何幫助都很感激。
查看完整描述

3 回答

?
鳳凰求蠱

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超4個(gè)贊

自6.0.24版以來,Tomcat附帶了內(nèi)存泄漏檢測特性,當(dāng)Webapp的驅(qū)動程序中有一個(gè)兼容JDBC4.0的驅(qū)動程序時(shí),這會導(dǎo)致這種警告消息。/WEB-INF/lib哪輛車-寄存器在webapp啟動時(shí)使用ServiceLoaderAPI但這不是自動的-注銷在webapp關(guān)機(jī)期間。這個(gè)消息純粹是非正式的,Tomcat已經(jīng)相應(yīng)地采取了防止內(nèi)存泄漏的行動。

你能做什么?

  1. 無視那些警告。托姆凱特做的很好。實(shí)際的bug在其他人的代碼中(有問題的JDBC驅(qū)動程序),而不是在您的代碼中。很高興Tomcat正確地完成了它的工作,并等待JDBC驅(qū)動程序供應(yīng)商修復(fù)它,以便您可以升級驅(qū)動程序。另一方面,您不應(yīng)該將JDBC驅(qū)動程序放在webapp中/WEB-INF/lib,但僅限于服務(wù)器的/lib..如果你還把它放在webapp里/WEB-INF/lib,然后您應(yīng)該手動注冊并使用ServletContextListener.

  2. 降級到Tomcat 6.0.23或更高版本,這樣您就不會被這些警告所困擾。但它會悄無聲息地漏掉記憶。不知道這到底是不是好消息。這種類型的內(nèi)存泄漏是背后的主要原因之一。OutOfMemoryError問題在Tomcat熱部署期間。

  3. 將JDBC驅(qū)動程序移動到Tomcat/lib文件夾,并有一個(gè)連接池?cái)?shù)據(jù)源來管理驅(qū)動程序。請注意,Tomcat的內(nèi)置DBCP在關(guān)閉時(shí)沒有正確地取消注冊驅(qū)動程序。參見bugDBCP-322作為WONTFIX關(guān)閉。您希望將DBCP替換為另一個(gè)連接池,它比DBCP做得更好。例如HikariCPBoneCP,或者也許TomcatJDBC池.


查看完整回答
反對 回復(fù) 2019-06-18
?
慕少森

TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊

盡管Tomcat為您強(qiáng)制取消JDBC驅(qū)動程序的注冊,但是在上下文破壞時(shí)清理Web應(yīng)用程序創(chuàng)建的所有資源是很好的做法,以防您遷移到另一個(gè)servlet容器,它不像Tomcat那樣進(jìn)行內(nèi)存泄漏檢查。

然而,全面取消司機(jī)登記的方法是危險(xiǎn)的。返回的一些司機(jī)DriverManager.getDrivers()方法可能是由父ClassLoader(即servlet容器的類加載器)加載的,而不是由webapp上下文的ClassLoader加載的(例如,它們可能位于容器的lib文件夾中,而不是Webapp的文件夾中,因此在整個(gè)容器中共享)。取消注冊將影響其他可能正在使用它們的Web應(yīng)用程序(甚至容器本身)。

因此,在取消注冊之前,應(yīng)該檢查每個(gè)驅(qū)動程序的ClassLoader是否是Webapp的ClassLoader。因此,在ContextListener的contextD及第()方法中:

public final void contextDestroyed(ServletContextEvent sce) {
    // ... First close any background tasks which may be using the DB ...
    // ... Then close any DB connection pools ...

    // Now deregister JDBC drivers in this context's ClassLoader:
    // Get the webapp's ClassLoader
    ClassLoader cl = Thread.currentThread().getContextClassLoader();
    // Loop through all drivers
    Enumeration<Driver> drivers = DriverManager.getDrivers();
    while (drivers.hasMoreElements()) {
        Driver driver = drivers.nextElement();
        if (driver.getClass().getClassLoader() == cl) {
            // This driver was registered by the webapp's ClassLoader, so deregister it:
            try {
                log.info("Deregistering JDBC driver {}", driver);
                DriverManager.deregisterDriver(driver);
            } catch (SQLException ex) {
                log.error("Error deregistering JDBC driver {}", driver, ex);
            }
        } else {
            // driver was not registered by the webapp's ClassLoader and may be in use elsewhere
            log.trace("Not deregistering JDBC driver {} as it does not belong to this webapp's ClassLoader", driver);
        }
    }}


查看完整回答
反對 回復(fù) 2019-06-18
  • 3 回答
  • 0 關(guān)注
  • 8411 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號