V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
h2so4
V2EX  ›  问与答

Tomcat 关闭的时候出现 JDBC 驱动的警告

  •  2
     
  •   h2so4 · 2017-05-17 22:29:24 +08:00 · 2296 次点击
    这是一个创建于 2507 天前的主题,其中的信息可能已经有所发展或是发生改变。
    The web application [ROOT] registered the JDBC driver [com.mysql.jdbc.Driver] 
    
    but failed to unregister it when the web application was stopped. 
    
    To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
    
    

    应用程序跑的没问题,但是强制解除注册了?用的 mybatis,是要我手动解除么?

    6 条回复    2017-05-18 11:17:48 +08:00
    ixiaohei
        1
    ixiaohei  
       2017-05-17 23:59:48 +08:00
    这个是 tomcat 关闭时候检查内存泄漏的提示,不用管就行了
    h2so4
        2
    h2so4  
    OP
       2017-05-18 00:19:11 +08:00
    @ixiaohei 他上面显示的是警告选项,和我的 webapp 代码无关的?
    Jerry09
        3
    Jerry09  
       2017-05-18 00:30:22 +08:00 via iPhone
    你推出之后看进程管理里面有没有 Java 内存泄漏了应该是
    honeycomb
        4
    honeycomb  
       2017-05-18 01:17:15 +08:00 via Android
    有些很旧的 JDBC 驱动会有关不掉的问题
    tianshuang
        5
    tianshuang  
       2017-05-18 09:20:14 +08:00
    import org.apache.logging.log4j.Level;
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;

    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    import java.sql.Driver;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.util.Enumeration;


    public class AppServletContextListener implements ServletContextListener {

    private static final Logger logger = LogManager.getLogger();

    @Override
    public void contextInitialized(ServletContextEvent sce) {

    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {

    // This manually deregisters JDBC driver, which prevents Tomcat from complaining about memory leaks to this class
    Enumeration<Driver> drivers = DriverManager.getDrivers();
    while (drivers.hasMoreElements()) {
    Driver driver = drivers.nextElement();
    try {
    DriverManager.deregisterDriver(driver);
    logger.log(Level.INFO, String.format("deregistering jdbc driver: %s", driver));
    } catch (SQLException e) {
    logger.log(Level.ERROR, String.format("Error deregistering driver %s", driver), e);
    }
    }

    }
    }
    h2so4
        6
    h2so4  
    OP
       2017-05-18 11:17:48 +08:00
    @honeycomb 5.1.6 版本不低吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5369 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 06:53 · PVG 14:53 · LAX 23:53 · JFK 02:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.