环境:

spring4.3, mybatis3.5.2, ojdbc8_8c(oracle 18c jdbc)

调试状态下退出时,提示:

严重 [main] org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks The web application [ROOT] created a ThreadLocal with key of type [oracle.jdbc.driver.AutoKeyInfo$1] (value [oracle.jdbc.driver.AutoKeyInfo$1@10289886]) and a value of type [oracle.jdbc.driver.OracleSql] (value [INSERT INTO 某表 (某字段1, 某字段1)
VALUES (?, ?)]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.

看提示是个插入语句,此表有主键,为整型,没有使用序列,自己生成的一个数值

警告信息中,AutoKeyInfo来源于:  package oracle.jdbc.driver (class AutoKeyInfo extends OracleResultSetMetaData)

分别在以下三块代码中打上断点,以方便查看是哪里调用的

    private static final ThreadLocal<OracleSql> SQL_PARSER = new ThreadLocal() {
protected OracleSql initialValue() {
return new OracleSql((DBConversion)null);
}
}; AutoKeyInfo(String var1) {
this.sqlKind = SqlKind.UNINITIALIZED;
this.originalSql = var1;
this.autoKeyType = 0;
} AutoKeyInfo(String var1, String[] var2) {
this.sqlKind = SqlKind.UNINITIALIZED;
this.originalSql = var1;
this.columnNames = var2;
this.autoKeyType = 1;
}

1. 开始调试,定位到调用处(org\mybatis\mybatis\3.5.2\mybatis-3.5.2-sources.jar!\org\apache\ibatis\executor\statement\PreparedStatementHandler.java),

其中: PreparedStatement.RETURN_GENERATED_KEYS 值 固定为 1 ;

2. 再进入(oracle\oracle-jdbc\18.3\ojdbc8_18c.jar!\oracle\jdbc\driver\PhysicalConnection.class),在此处生成了 AutoKeyInfo对象

上网找AutoKeyInfo对象的作用,没有找到合适的说明,猜测是与表自增长字段有关的,但此处不需要自增长,想着在第1步有分支【if (keyColumnNames == null)】

,如果keyColumnNames不为null,走 connection.prepareStatement(sql, keyColumnNames)会不会产生AutoKeyInfo了?

3. 打开mybatis官网(我是访问的中文: https://mybatis.org/mybatis-3/zh/sqlmap-xml.html#insert_update_and_delete)

找到 insert, update 和 delete部分,看到keyColumn属性,在自己业务层面 dao.xml对应语句的地方,加上: keyColumn = "字段1",再调试

4. 进入到

5. 还是走到了第2步,试着在第3步 keyColumn = "字段1" 再加上 useGeneratedKeys="false", 官网上说明 false是默认值,不设置应该就采用false,但想着加上试一下

6. 进入(connection.prepareStatement(sql)):

此次没有再创建 AutoKeyInfo,退出程序,也没有发现警告信息了

created a ThreadLocal with key of type [oracle.jdbc.driver.AutoKeyInfo$1]的更多相关文章

  1. tomcat加载时报The web application [/dmscs] created a ThreadLocal with key of type

    严重: The web application [/dmscs] created a ThreadLocal with key of type [com.opensymphony.xwork2.inj ...

  2. The web application [/struts2_0100] created a ThreadLocal with key of type

    引用: 严重: The web application [/struts2_0100] created a ThreadLocal with key of type [com.opensymphony ...

  3. 错误:created a ThreadLocal with key of type ……but failed to remove it when the web application was stopped. This is very likely to create a memory leak.

    tomcat reload显示错误:SEVERE: The web application [/Interceptor] created a ThreadLocal with key of type ...

  4. Class org.apache.struts2.json.JSONWriter can not access a member of class oracle.jdbc.driver.Physica

    产生这个错误的原因是因为我的oracle数据库中有一个CLOB字段,查询出来的时候要转换为JSON而报错. Class org.apache.struts2.json.JSONWriter can n ...

  5. Maven魔法堂:安装Oracle JDBC Driver依赖的那些坑

    前言 由于Oracle并没有向公开Maven仓库提供任何Oracle JDBC Driver的Jar包,因此我们无法像MySQL.SQLite等那么轻松直接通过Maven加载依赖. 而手动下载Orac ...

  6. java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 错误的解决办法

    java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 错误的解决办法 (2011-05-05 16:08:05) 转载▼ ...

  7. myeclipe eclipse 常遇问题:Some projects cannot be imported 、java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver、The file connot be validate

    1.Some projects cannot be imported because they already exist in the workspace 2.Some projects were ...

  8. 关于Class.forName("oracle.jdbc.driver.OracleDriver");报ClassNotFoundException 的异常

    关于try { Class.forName("oracle.jdbc.driver.OracleDriver"); }catch(ClassNotFoundException e) ...

  9. 【转】Install Oracle Jdbc driver in your Maven local repository

    Install Oracle Jdbc driver in your Maven local repository If you are using Oracle, you must first in ...

随机推荐

  1. 微信小程序引用外部js,引用外部样式,引用公共页面模板

    https://blog.csdn.net/smartsmile2012/article/details/83414642 ================小程序引用外部js============= ...

  2. JQuery - $(this) 加 siblings() 的使用

    <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8 ...

  3. Spring MVC原理解析

    SpringMVC Spring MVC的工作原理 ①客户端的所有请求都交给前端控制器DispatcherServlet来处理,它会负责调用系统的其他模块来真正处理用户的请求. ② Dispatche ...

  4. php接口安全设计浅谈

    接口的安全性主要围绕Token.Timestamp和Sign三个机制展开设计,保证接口的数据不会被篡改和重复调用,下面具体来看: (1)Token授权机制:(Token是客户端访问服务端的凭证)--用 ...

  5. Python 基础之面向对象类的继承与多态

    一.继承 定义:一个类除了拥有自身的属性方法之外,还拥有另外一个类的属性和方法继承: 1.单继承 2.多继承子类: 一个类继承了另外一个类,那么这个类是子类(衍生类)父类:一个类继承了另外一个类,被继 ...

  6. 设计模式课程 设计模式精讲 13-2 享元模式coding

    1 代码演练 1.1 代码演练1 1 代码演练 1.1 代码演练1 需求: 每周由随机部门经历做报告: 重点关注: a 该案例是单例模式和享元模式共同使用 b 外部传入的department是外部状态 ...

  7. js获取video的播放时长

      setTimeout(function () { var vid = document.getElementById("videoIntro"); var currentTim ...

  8. Burp Suite Pro1.7.36破解版

    百度网盘下载(H大会一直更新):链接: https://pan.baidu.com/s/1brjPKM7 密码: 9v4r 爱盘下载:https://down.52pojie.cn/Tools/Net ...

  9. android图片保存到SQLlite如何实现?

    //写入数据库               ImageView pic = (ImageView) findViewById(R.id.picture);                        ...

  10. 基于zedboard的DMA设计笔记

    2.BAR0空间的概念:BAR(Base Address Register ) 该组寄存器简称为BAR寄存器,BAR寄存器保存PCI设备使用的地址空间的基地址,该基地址保存的是该设备在PCI总线域中的 ...