`
旋风小胖神
  • 浏览: 7856 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Spring 管理定时任务时,服务器不起作用,解决方法。

阅读更多
最近做了一个定时发邮件的功能,之间遇到了几个问题,经过努力总算解决了!现在和大家分享一下!
我用的到环境是   Linux+Struts2+Spring+Hibernate+Tomcat6.0+ MySQL。

采用了 DBCP 连接池,用Spring 管理Hibernate的配置方案。

定时功能配置:

         <bean id="someData" class="com.xxxx.web.utils.JobData">
		
	</bean>
	<bean id="someJob" class="com.xxxx.web.utils.EmailReportJob">
   		<property name="jobData" ref="someData"></property>
   		<property name="songService" ref="songService"></property>
   		<property name="customerService" ref="customerService"></property>
	</bean>
	<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
	    <property name="targetObject" ref="someJob"></property>
	    <property name="targetMethod" value="execute"></property>
	</bean>
	<bean id="cronTriggerBean" class="org.springframework.scheduling.quartz.CronTriggerBean">
	    <property name="jobDetail" ref="jobDetail"></property>
	    <property name="cronExpression" value="0 0 8 * * ?"/>
	</bean>
	<bean id="scheduledFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
	   <property name="triggers">
	     <list>
	       <ref bean="cronTriggerBean"/>
	     </list>
	   </property>
         <property name="autoStartup" value="true"/>
         </bean>


这样配置完就可以了! 注意
<property name="cronExpression" value="0 0 8 * * ?"/> 时间的设置格式。

配置完之后 我就部署到Linux 环境下了!结果可以发邮件。我想终于做完了!令我没有想到的是 第二天 8点 居然不起作用。后台还报了很多错误。

错误信息:
java.io.EOFException
        at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1963)
        at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2375)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2874)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1623)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1715)
        at com.mysql.jdbc.Connection.execSQL(Connection.java:3243)
        at com.mysql.jdbc.Connection.setAutoCommit(Connection.java:5371)
        at org.apache.commons.dbcp.DelegatingConnection.setAutoCommit(DelegatingConnection.java:331)
        at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.setAutoCommit(PoolingDataSource.java:317)


我一看 原来是MySQL 里的timeout 超时了!看看了MySQL 的配置文件 默认的是8个小时。 我的要个24个小时才执行一次。看了看DBCP的配置原来忘了配置 这些属性,真是失败啊!

补上了配置之后:

jdbc.connection.driver_class=com.mysql.jdbc.Driver
jdbc.connection.url=jdbc:mysql://127.0.0.1:3306/xxxx?autoReconnect=true&autoReconnectForPools=true&useUnicode=true&characterEncoding=gbk
jdbc.username=root
jdbc.password=0
testWhileIdle=true
testOnBorrow=false
testOnReturn=false
validationQuery=select 1
#dbcp.validationQueryTimeout=1
timeBetweenEvictionRunsMillis=30000
numTestsPerEvictionRun=20
hibernate.dialect=org.hibernate.dialect.MySQLDialect


<!-- 配置数据源 -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName">
			<value>${jdbc.connection.driver_class}</value>
		</property>
		<property name="url">
			<value>${jdbc.connection.url}</value>
		</property>
		<property name="username">
			<value>${jdbc.username}</value>
		</property>
		<property name="password">
			<value>${jdbc.password}</value>
		</property>
		<property name="testWhileIdle">
			<value>${testWhileIdle}</value>
		</property> 
		<!-- 打开检查,用异步线程evict进行检查 -->   
        <property name="testOnBorrow">
        	<value>${testOnBorrow}</value>
        </property>   
        <property name="testOnReturn">
        	<value>${testOnReturn}</value>
        </property>   
        <property name="validationQuery">
        	<value>${validationQuery}</value>
        </property>
             
        <property name="timeBetweenEvictionRunsMillis">
        	<value>${timeBetweenEvictionRunsMillis}</value>
        </property>   
        <property name="numTestsPerEvictionRun">
        	<value>${numTestsPerEvictionRun}</value>
        </property>	
</bean>


这样配置完就可以了!注意一个问题 就是
<property name="validationQuery"><value>select 1</value></property> 里面的value 值会随着数据库的不同而不同,具体是什么如下:

DBCP:
对属性 validationQuery 设置一个简单的SQL语句就行了,例如:select 1 (mysql 和 sql server 适用)、SELECT COUNT(*) FROM DUAL(oracle)

现在可以用了。具体一些细节可以给我回帖!希望大家热烈讨论!
分享到:
评论

相关推荐

    spring整合java quartz实现动态定时任务的前台网页配置与管理

    可以通过quartz和spring的简单配置即可完成,但如果要改变任务的执行时间、频率,废弃任务等就需要改变配置甚至代码需要重启服务器,这里介绍一下如何通过quartz与spring的组合实现动态的改变定时任务的状态的一个...

    完美解决多应用服务器负载均衡环境下spring quartz同一定时任务重复执行问题

    NULL 博文链接:https://medbricom.iteye.com/blog/1782765

    Spring + quartz 定时任务修改定时时间不重启服务

    Spring + quartz 定时任务修改定时时间不重启服务

    Spring定时任务(多个实例)

    Spring定时任务,里面有多个实例,配置形式的 还有注解实现的,还有quartz和Spring实现的,希望对大家有用

    spring+quartz 动态任务方案

    Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。...例如,在使用 WebSphere 应用服务器时,由 Quartz 调度的作业并不能影响服务器的动态缓存和数据源。

    springboot schedule 解决定时任务不执行的问题

    主要介绍了springboot schedule 解决定时任务不执行的问题,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

    Spring定时任务使用及如何使用邮件监控服务器

    主要介绍了Spring定时任务使用及如何使用邮件监控服务器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Java应用多机器部署解决大量定时任务问题

    主要介绍了Java应用多机器部署解决大量定时任务问题,两台服务器同时部署了同一套代码, 代码中写有spring自带的定时任务,但是每次执行定时任务时只需要一台机器去执行,需要的朋友可以参考下

    Spring Boot与Kotlin定时任务的示例(Scheduling Tasks)

    主要介绍了Spring Boot与Kotlin定时任务的示例(Scheduling Tasks),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    ssm+mysql+springSecurity开发的后台管理系统

    springMVC+springSecurity3+Mybaits3的权限系统 包括用户管理 角色管理 资源管理 服务器配置管理 登陆... springQuartz 定时任务  springAOP日志拦截处理  Mybaits分页插件封装统一处理 登录账号/密码:admin/admin

    Spring 2.0 开发参考手册

    12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用...

    Spring-Reference_zh_CN(Spring中文参考手册)

    12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用服务器...

    Spring中文帮助文档

    12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用...

    spring chm文档

    Spring Framework 开发参考手册 Rod Johnson Juergen Hoeller Alef Arendsen Colin Sampaleanu Rob Harrop Thomas Risberg Darren Davison Dmitriy Kopylenko Mark Pollack Thierry Templier Erwin ...

    Spring API

    12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用...

    Spring+Quartz集群部署案例

    最近项目中使用了spring+Quartz定时任务、但是项目最近要集群部署、多个APP下如何利用Quartz 协调处理任务。 大家可以思考一下、现在有 A、B、C三个应用同时作为集群服务器对外统一提供服务、每个应用下各有一个...

    基于SpringBoot+Vue的轻量级定时任务管理系统.zip

    Spring Boot 是伴随 Spring 4 而产生的技术框架,具备良好的技术基因。在继承 Spring 框架所有优点的同时,它也为开发人员带来了巨大的便利。与普通的 Spring 项目相比,Spring Boot 可以简化项目的配置和编码,使...

    基于spring-boot+vuejs+element-ui的新闻发布管理系统源码+项目说明.zip

    - 定时任务:整合Quartz做定时任务,加入任务日志,任务运行情况一目了然 - 代码生成:高灵活度生成前后端代码,减少大量重复的工作任务 - 邮件工具:配合富文本,发送html格式的邮件 - 七牛云存储:可同步七牛云...

    spring boot quartz集群实现

    之后的服务器会根据数据库中的内容启动定时任务。 因为定时任务是根据数据库内任务状态启动的所以避免了并发重复的显现。 本项目没有接入多个节点所以支持集群却没有真正实现,否则不好启动。

    基于SpringCloud+Hadoop+Vue的企业级网盘系统设计与实现源码

    后台模块分为用户、部门、角色、网盘、日志、系统监控、接口文档、定时任务模块。在网络磁盘管理模块中,管理员可以上传、删除和修改文档,管理员还可以在线查看多媒体资源,如Word文档、视频、音乐、图片。 管理员...

Global site tag (gtag.js) - Google Analytics