最近在做一个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. python模块调用

    1.某个模块1被调用到另一个模块2的时候,当不想模块1中的某些代码在模块2中执行时,可以在模块一种添加如下代码: if    __name__  ==     "__main__" ...

  2. Sql-oracle and sqlserver differences

    1.string contact operator Sqlserver use + or contact(sqlserver 2012) In oracle, you can also use con ...

  3. Tomcat 长连接与短连接性能测试

    环境: 操作系统:centos 6.5 x64 cpu:32 core 内存:  32G web服务器:tomcat 6.x jdk :1.6x 测试环境: 操作系统:centos 6.5 x64 c ...

  4. 解决客户端通过zookeeper连接到hbase时连接过多的问题

    原因:客户端程序通过zookeeper访问hbase的连接数超过设置的默认链接数(默认数是30),连接数不够用会导致后续的连接连接不上去. 解决办法:设置hbase-site.xml配置文件,添加如下 ...

  5. 【Ext.Net学习笔记】02:Ext.Net用法概览、Ext.Net MessageBus用法、Ext.Net布局

    Ext.Net用法概览 Ext.Net还是很强大,如果运用熟练可以极大的提高编程效率.如果你也要学习Ext.Net,原文博主推荐书籍:<Ext.Net Web 应用程序开发教程>,是英文的 ...

  6. Android网络之数据解析----SAX方式解析XML数据

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  7. java14-4 Pattern和Matcher类的使用

     获取功能  Pattern和Matcher类的使用  模式和匹配器的基本使用顺序 import java.util.regex.Matcher; import java.util.regex.Pat ...

  8. [转] 值得推荐的C/C++框架和库

    http://www.cppblog.com/merlinfang/archive/2014/12/26/209311.aspx

  9. Android 中JNI创建实例

    参考文档: http://blog.sina.com.cn/s/blog_a11f64590101924l.html http://www.cnblogs.com/hoys/archive/2010/ ...

  10. 解决: osx内置vpn连接后无法ping自己的vpn ip地址

    The route table looks like this after connected to the VPN: 10.20.1/24 10.20.11.147 UGSc 0 0 utun0 1 ...