最近在做一个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. nginx 负载均衡示例

    一.nginx nginx是一个轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,以开源形式发布.nginx的性能稳定,功能丰富,配置简单,且占用系统资源低.可支持多个 ...

  2. linux64位android项目R文件无法生成以及Cannot run program adb

    1.本机kali2.0  64位,kali基于Debian. 2.android adb是32位,64位linux要安装32位依赖库,注意ia32-lib被lib32z1替代. 3.执行命令 sudo ...

  3. linux搭建mysql 5.6.28

    1.下载rmp文件 http://dev.mysql.com/downloads/mysql/ 2.安装 rpm -ivh MySQL-server--.linux_glibc2..x86_64.rp ...

  4. phpcms v9 下拉菜单 二级 三级子栏目调用方法

    很多网站的导航栏可以实现下拉二级菜单,三级菜单等效果,今天我们就来分享phpcms v9 支持下拉菜单的方法,可以支持无限子栏目调用,具体写法如下: <ul> {pc:content ac ...

  5. 【CSS】颜色码对照表

    英文代码 形像颜色 HEX格式 RGB格式 LightPink 浅粉色 #FFB6C1 255,182,193 Pink 粉红 #FFC0CB 255,192,203 Crimson 猩红 #DC14 ...

  6. 深度优先搜索 codevs 1064 虫食算

    codevs 1064 虫食算 2004年NOIP全国联赛提高组  时间限制: 2 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond   题目描述 Description 所 ...

  7. 边工作边刷题:70天一遍leetcode: day 81

    Encode and Decode Strings 要点:题的特点:不是压缩,而是encode为字节流.所以需要找delimiter来分割每个word,但是delimiter可能是字符本身,所以可以用 ...

  8. Debian下安装deb格式安装包

    dpkg -i 软件包名称 就好啦 下面是相应链接: http://blog.csdn.net/lhf_tiger/article/details/7493400

  9. 2016"百度之星"-资格赛

    //本题要求:(Ar*A2...An)%p,亦即[(A1*A2*...An)/(A1*A2*...Ar-1)]%p,由于A1*A2...An乘积过大,无法求得相除所得的结果 //我们需要用到乘法逆元( ...

  10. C++ 基础笔记(一)

    解释型和编译型 解释型: 边解释边执行,翻译成机器代码后就执行. 编译型: 整篇代码编译成机器码后,保存在可执行文件中,然后启动该程序文件,运行获得结果. Hello World #include & ...