最近在做Java后台的项目,用到了druid数据库连接池,阿里出品,肯定是精品的意思咯,这也是我们老大搭建的框架,我就站在前人的肩膀上飞翔了。先前在一个事物里,使用了多条数据库操作,都是正常的,但是前天出了问题,一直报java.sql.SQLException: connection holder is null 异常,很是苦恼。

因为能呼吸新鲜空气,首先用的是Google,但是这个是阿里出品,国人用的比较多,找到的基本都是咱们程序员弄的答案,大致的解决方案如下:

1:设置removeAbandonedTimeout超时时间,配置一般都是180,设置成1800,并且将removeAbandoned设置为true

/*是否自动回收超时连接*/

<property name="removeAbandoned" value="true" />

/*延长这个所谓的超时时间*/

<property name="removeAbandonedTimeout" value="1800" />

2:直接关闭removeAbandoned

<property name="removeAbandoned" value="false">

看到这两个答案,心里狂喜,原来很多人遇到了一样的问题,那就开干,结果,GG,对我来说作用并不大。我也查阅了我的Git日志,自始至终没有修改过配置,所以配置对我来说肯定是对的,而且先前跑的代码也是正确,就不知道哪儿出问题了。

但是先前想到,因为在代码review的时候,把数据库连接给关闭了,但是我后面又想要使用这个链接,而我出错的地方就是在我想重新获取连接的时候出错了,贴上我的代码

conn = DataSourceUtils.getConnection(transactionManager.getDataSource());

就是这行报了错。在使用之前,我把连接关闭了,用的方法如下

 /**
* 快捷关闭
*
* @param connection
* @paramlogger.error("", e);
*/
public void shortCutClose(Connection connection, Statement statement, ResultSet rs) {
try {
if (rs != null && !rs.isClosed()) {
rs.close();
}
if (statement != null && !statement.isClosed()) {
statement.close();
}
if (connection != null && !connection.isClosed()) {
if (!connection.getAutoCommit())
connection.setAutoCommit(true);
connection.close();
}
} catch (SQLException e) {
logger.error("", e);
} }

自此发现问题,我把conn关闭了,我后面想用也难呀。所以诞生了第三种方案,就是不能把conn关闭后还想着去用它。如果你确定后续还需要使用,那么就不要画蛇添足啦

为什么会找到这里,一方面是因为项目代码都是自己写的,有怀疑的地方大概有个数,还有就是借用了大家问答下面的回答,我就是看了关于druid数据连接池抛出的 connection holder is null 异常这篇文章里“毛衣”哥的回复,我才想到要去用这个方法尝试下,结果果然可以,所以我给他写了个评论,支持他分享,但是又怕他没看见,所以还是立马下定决心,自己写下这个感悟,提供另一个思路给需要的小伙伴。主要是参考了好几个写前面两个方案的博客,后面的评论还是有很多利用了这两个方案没解决的,所以我这里只是提供另外一种思路给各位,希望能打开大家的其他思路。

本人以前一直是Android开发,写了3年,现在转行写Java后台了,所以难免采坑的地方比较多,后续需要多一些这种风暴,踩完坑,爬出来,然后记录下这深刻的教训。欢迎大家和我一起交流写程序,哈哈

爱生活,爱学习,爱感悟,爱挨踢

connection holder is null新增解决方案(2018-06-02)的更多相关文章

  1. java.sql.SQLException: connection holder is null 问题处理

    问题描述 上上个周测试的时候突然报系统异常,于是我立即查看日志,发现是一个数据库异常:java.sql.SQLException: connection holder is null我第一想到的就是可 ...

  2. java.sql.SQLException: connection holder is null;

    一.问题来源分析 出现的错误 : Cause: java.sql.SQLException: connection holder is null; uncategorized SQLException ...

  3. 开发中遇到的Cause: java.sql.SQLException: connection holder is null的异常

    异常的出现是属于获取连接超时,从而找不到持有者. 项目中的配置体现: <property name="removeAbandoned" value="true&qu ...

  4. EZ 2018 06 02 NOIP2018 模拟赛(十七)

    这次的比赛是真心比较狗,我TM的写了30min的树剖ZZ地直接memset超时了 话说我既然想到差分就应该去写差分的啊! 好了不过这次Rank还挺高的,终于要打进前10了当然是假的了. 好了下面开始讲 ...

  5. Connection cannot be null when 'hibernate.dialect' not set

    严重: Exception sending context initialized event to listener instance of class [org.springframework.w ...

  6. Caused by: org.hibernate.HibernateException: Connection cannot be null when 'hibernate.dialect' not set

    docs.jboss.org文档示例代码:(http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/) sta ...

  7. Insider Dev Tour(2018.06.28)

    时间:2018.06.28地点:北京金茂万丽酒店

  8. webapi中session为null的解决方案

    Session  webapi中session为null的解决方案 在Global.asax里添加:开启Session功能(默认是不开启) 重写init方法 public class WebApiAp ...

  9. struts2的action中@Autowired注入为null的解决方案

    今天遇到类似问题,记录下来以便以后查阅: @Aspect作用于action,致使action中的@Autowired注入为null的解决方案,以下三种任选一种: 1.去掉@Autowired,改用se ...

随机推荐

  1. 贝叶斯深度学习(bayesian deep learning)

      本文简单介绍什么是贝叶斯深度学习(bayesian deep learning),贝叶斯深度学习如何用来预测,贝叶斯深度学习和深度学习有什么区别.对于贝叶斯深度学习如何训练,本文只能大致给个介绍. ...

  2. 【重学计算机】操作系统D6章:并发程序设计

    1. 并发程序的基本概念 程序顺序性 内部顺序性:CPU严格按照顺序执行指令 外部顺序性:程序员设计程序时往往用顺序设计的思想 顺序程序特性 程序执行的顺序性 计算环境的封闭性: 程序执行时犹如独占资 ...

  3. Go:学习笔记兼吐槽(3)

    Go:学习笔记兼吐槽(1) Go:学习笔记兼吐槽(2) Go:学习笔记兼吐槽(3) 数组 Golang 中,数组是值类型. 数组的声明 var arr [10]int 数组的初始化 var arr1  ...

  4. rocketMQ安装中遇到的坑

    安装步骤是这些: Prerequisite The following softwares are assumed installed: 64bit OS, Linux/Unix/Mac is rec ...

  5. 【Java】几道常见的秋招面试题

    前言 只有光头才能变强 Redis目前还在看,今天来分享一下我在秋招看过(遇到)的一些面试题(相对比较常见的) 0.final关键字 简要说一下final关键字,final可以用来修饰什么? 这题我是 ...

  6. WPF 小小案列(同步异步)

    private void BtnButton_Click(object sender, RoutedEventArgs e) { MessageBox.Show("hello Word&qu ...

  7. 使用myeclipse修改项目映射路径

    这里主要做下记录,找到myeclipse中对项目路径进行查看以及修改的地址 如图 点击项目右键 实例url:http://localhost:8080/myFirstServlet/one 对应路径中 ...

  8. Java基础练习4(内存管理)

    请根据如下程序代码,画出对应的内存管理图(不需要画方法区),并写出输出结果. 1. public class Cell{ int row; int col; public Cell(int row,i ...

  9. 调用pymysql模块操作数据库

    1.创建数据库表: def create_table(tb_name): import pymysql#导入模块 #连接数据库 db = pymysql.Connect(','zabbix_db') ...

  10. 用css画一个哆啦A梦

    原图: 效果图: 虽然说没用啥什么高级的技巧,但这让我感受到了CSS的乐趣! 好好学习,天天向上! <!DOCTYPE html> <html> <head> &l ...