最近在做一个java项目的时候遇到一个十分奇怪的问题,想到大家可能也会遇到这样的问题,所以在此发出来,希望大家遇到的时候能够快速解决!

直入主题

问题:使用quartz进行定时任务自动执行的时候,用到hibernate进行数据库交互,Tomcat运行中,会遇到在某个访问前后无故停止运行,之后的定时任务全部卡住!

问题解析:首先我从几个方面考虑这个问题。

1、quartz配置问题。

2、数据库连接超时。

3、Tomcat自动清理或者超时。

4、quartz线程死锁或阻塞。

5、hibernate Session问题。

综合考虑以上问题,一个一个考虑。首先,我的配置是没有问题的,因为quartz的配置还是很清晰和简单的,经过反复查看没有问题。数据库连接在我设置成1s周期的时候也是没有问题的,同时也不会是第三个原因。由于我的quartz的线程设置都是使用默认的,而且我在线程列表中也看到,有10个线程,所以线程不够用导致阻塞是不可能的。死锁的问题我也不用考虑,因为每个任务都是单独存在的,没有关联。那就剩最后一个原因了,说实话,最后一个原因是我没办法的时候才突然想到的,也是问题所在。

hibernate有自己的连接池,在使用的时候我们新建的所有连接都会存在这个连接池中,如果你所建的新连接太多而不释放,那么就会导致你的新连接无法创建,从而阻塞,这也是为什么程序中无故停止,而且没i有任何错误的原因。

那么怎么解决这个问题呢,使用Hibernate时,大家一般都记住了配置基本的那些选项,比如方言,缓存等,但是有一项配置卻很容易忘掉,这就是连接释放模式:hibernate.connection.release_mode

这个配置项有三个选择:after_statement/after_transaction/on_close,javadoc中可以看出它们的用处,注意的一点是,如果不配置,默认是on_close,那么如果沒有显示的去调用session.close或其它关闭连接的方法的话,这个连接时不会被关闭的!在用到连接池的時候,就更会出现问题了,池中的连接会一直存在着而不会被关闭和回收!

具体的配置:<prop key="hibernate.connection.release_mode">after_transaction</prop>

放在你的hibernate配置里面就可以了。这样我们的连接自动释放后就不会出现上述问题了。

PS:这个问题我解决了很长时间,网上的资料查了很多,浪费了很多时间,同时也有人遇到这样的问题,但是解决方式都不太对症。最后发现了这个问题。终于解决了,写在这里,方便大家。尽量不要在这个问题上浪费时间。

如果帮助到了你,请点赞,谢谢!

2015 12 16

今天又深入的研究了一下,问题的源头是连接池连接阻塞,所以我修改了数据源的连接回收时间,实验有效。具体配置如下,大家可以试试

        <!-- 初始连接数目 -->
<property name="initialSize" value="10"></property>
<!-- 最大连接数目 -->
<property name="maxActive" value="50"></property>
<!-- 最大空闲连接数目 -->
<property name="maxIdle" value="50"></property>
<!-- 最小空闲连接数目 -->
<property name="minIdle" value="0"></property>
<!-- 超时等待时间以毫秒为单位 -->
<property name="maxWait" value="10000"></property>
<!-- #是否自动回收超时连接 -->
<property name="removeAbandoned" value="true"></property>
<!-- #设置被遗弃的连接的超时的时间(以秒数为单位),即当一个连接被遗弃的时间超过设置的时间,则它会自动转换成可利用的连接。默认的超时时间是300秒。 -->
<property name="removeAbandonedTimeout" value="60"></property>
<!-- #是否在自动回收超时连接的时候打印连接的超时错误 -->
<!-- <property name="logAbandoned" value="true"></property> -->

Java问题:Quartz,Hibernate,Spring,Tomcat中定时任务无故停止,没有错误的更多相关文章

  1. hibernate+spring+tomcat启动报错Not supported by BasicDataSource

    最近使用hibernate+spring+jsp的小项目制作过程中出现一些错误,例如: java.lang.UnsupportedOperationException: Not supported b ...

  2. Java反射机制在Spring IOC中的应用

    反射的定义: 反射是java语言的一个特性,它允程序在运行时(注意不是编译的时候)来进行自我检查并且对内部的成员进行操作.例如它允许一个java的类获取它所有的成员变量和方法并且显示出来. 反射机制的 ...

  3. Eclipse中的普通Java项目如何部署到Tomcat中

    我现在的做法: 1.在Eclipse中配置Tomcat时,选择创建Context文件,而不是server.xml,好处是文件可以随便命名,与虚拟目录一致(即xml中的属性path).Tomcat加载项 ...

  4. 转:Java Web 项目发布到Tomcat中三种部署方法

    首先整理项目文件,文件内包含jsp.js等和class编译后的文件及lib包,如: 第一种方法:在tomcat中的conf目录中,在server.xml中的,<host/>节点中添加:   ...

  5. Java Web 项目发布到Tomcat中三种部署方法

    第一种方法:在tomcat中的conf目录中,在server.xml中的,节点中添加: <Context path="/" docBase="E:\TOMCAT\a ...

  6. Java之ssh框架spring配置文件配置定时任务

    最近做了一个数据同步功能,要求晚上0点去定时同步数据,这是个老项目框架用的ssh,定时任务基于quartz,废话不多说,下面详细说说相关配置. 在spring的配置文件中: <!-- 0点定时任 ...

  7. java框架---->quartz整合spring(一)

    今天我们学习一下quartz的定时器的使用.年轻时我们放弃,以为那只是一段感情,后来才知道,那其实是一生. quartz的简单实例 测试的项目结构如下: 一.pom.xml中定义quartz的依赖 & ...

  8. java面试题之spring aop中jdk和cglib哪个动态代理的性能更好?

    在jdk6和jdk7的时候,jdk比cglib要慢: 在jdk8的时候,jdk性能得到提升比cglib要快很多: 结论出自:https://www.cnblogs.com/xuliugen/p/104 ...

  9. Linux安装Tomcat-Nginx-FastDFS-Redis-Solr-集群——【第九集-补充-热部署项目到tomcat中,但是数据库配置文件错误,中途停止部署,导致执行shutdow.sh报错异常: Could not contact localhost:8005. Tomcat may not be running error while shutting down】

    1,经过千辛万苦的尝试和百度,终于一个博客:http://stackmirror.caup.cn/page/skxugjqj0ldc关于catalina.sh文件的执行引起了我的注意: 2,我执行ca ...

随机推荐

  1. kettle初探

    Kettle是Pentaho的一个组件,主要用于数据库间的数据迁移,到我用过的4.2版,还不支持noSQL,不知道4.4是不是支持了. Kettle自己有三个主要组件:Spoon,Kitchen,Pa ...

  2. SQL中case语句的两种方式

  3. spring mvc 和junit 4集成的注意点

    常规步骤: 1.导入jar包,主要有两个,spring-test 和 junit4,主要用maven管理,直接依赖即可.可以在这个网站上进行查找或下载:http://mvnrepository.com ...

  4. Listview的点击事件

    上篇文章总结了如何自定义listview的显示内容,然而listview不能只是提供显示功能,还必须能够点击它显示一些东西: listView.setOnItemClickListener(new O ...

  5. UESTC 913 握手 Havel定理+优先队列

    给定一个非负整数序列{dn},若存在一个无向图使得图中各点的度与此序列一一对应,则称此序列可图化.进一步,若图为简单图,则称此序列可简单图化. 此题因为是无自环无重边,所以是简单图.用判定简单图可图化 ...

  6. JQuery demo

    <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...

  7. canvas仿屏幕保护运动线条

    canvas是H5中及其重要的一个新标签,它得出现不仅让前端做图形图表功能变得异常强大,还用极强的性能丰富前端渲染页面的能力. Life is not a problem to be solved, ...

  8. CSS3中的字体rem

    rem和em都是相对单位,em相对父元素的font-size来计算,而rem是根据文档根元素(html)的font-size大小来计算的 通常将html的字体大小设为62.5%(等于10px),当然也 ...

  9. windows客户机连接gerrit的一个报错处理

    gerrit环境部署在linux服务器,windos客户机连接gerrit进行代码操作: 在windows客户机下载Git客户端 在“Git Bash”里使用 ”ssh-keygen -t rsa - ...

  10. 15SpringMvc_在业务控制方法中写入模型变量收集参数,且使用@InitBind来解决字符串转日期类型

    之前第12篇文章中提到过在业务控制方法中写入普通变量收集参数的方式,也提到了这种凡方式的弊端(参数很多怎么办),所以这篇文章讲的是在业务控制方法中写入模型变量来收集参数.本文的案例实现的功能是,在注册 ...