`
旋风小胖神
  • 浏览: 7973 次
  • 性别: 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 quartz同一定时任务重复执行问题

    然而,当多个服务器实例并行运行时,如果不采取适当的策略,同一定时任务可能会在每个服务器上都执行,导致数据不一致和资源浪费。 解决这个问题的关键在于实现任务的分布式协调,确保只有一个服务器实例执行特定的...

    Spring定时任务(多个实例)

    在Spring框架中,定时任务是实现自动化操作的重要手段,它允许开发者在特定时间点执行特定的任务,例如数据清理、报表生成等。本篇文章将详细探讨Spring中的定时...希望这些知识对您在实现Spring定时任务时有所帮助。

    Spring3.0定时任务简单实例web工程

    总结起来,通过Spring 3.0的定时任务机制,我们可以轻松地在Web环境中创建和管理周期性任务。结合`@Scheduled`注解、`TaskScheduler`配置以及Web应用的部署策略,可以构建出稳定、可扩展的定时任务解决方案。在实际...

    java动态管理定时任务

    在Java开发中,定时任务是不可或缺的一部分,尤其在企业级应用中,用于执行定期的数据处理、报表生成、系统维护等工作。Spring框架与Quartz库的整合提供了强大的动态管理定时任务的能力。下面我们将深入探讨这个主题...

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

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

    Spring+Quartz 从数据库中获取定时任务和定时时间,动态实现对定时任务的增删改查

    4. **部署与测试**:项目部署在Tomcat服务器上,当服务器启动时,Quartz会自动加载数据库中的定时任务。通过监控日志或者定制的监控界面,可以观察到定时任务的执行情况,验证其是否按照预期工作。 5. **Spring的...

    spring定时任务执行两次的异常排查处理

    一个tomcat下部署了两个应用,一个是普通web应用syncc,另一个应用syncc_wx属于微信公众号后台程序涉及消息定时推送,tomcat未分离...”spring定时任务执行两次的异常排查处理.docx"针对上述描述问题进行分析和解决。

    spring boot 定时任务源码

    当应用部署在多台服务器上时,可能需要考虑分布式定时任务的解决方案,如使用Quartz或XXL-Job,它们支持集群和任务分配。 10. **测试定时任务** 可以在测试类中使用`@TestPropertySource`来模拟不同的时间环境,...

    spring中邮件及定时任务

    总的来说,Spring的邮件服务和定时任务为开发者提供了强大的工具,能够方便地进行邮件通信和自动化任务的管理。理解并熟练运用这两个功能,可以提升你的应用程序的交互性和自动化程度。在实际开发中,可以根据项目...

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

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

    Spring quartz 定时任务调度

    通过以上介绍,我们可以看出Spring Quartz是一个功能强大且灵活的任务调度解决方案,适用于各种需要定时任务的应用场景。结合Spring的特性,可以让开发人员更高效地管理和执行定时任务,提高软件的自动化水平。

    spring整合quartz定时任务调度

    6. **启动Scheduler**:在Spring应用启动时,通过调用Scheduler的`start()`方法来启动定时任务调度。 7. **动态管理任务**:通过Spring的`Scheduler`实例,你可以方便地进行任务的添加、删除、暂停和恢复等操作,...

    spring boot定时任务接收邮件并且存储附件的方法讲解

    关于 Spring Boot 定时任务接收邮件并且存储附件的方法讲解 Spring Boot 是一个基于 Java 的框架,它提供了许多实用的功能,包括定时任务。在 Spring Boot 中实现定时任务非常简单,只需要使用两个注解:`@...

    Spring2.5+Quartz定时任务简单例子web工程

    在"Spring2.5+Quartz定时任务简单例子web工程"中,我们可以看到这两个框架的结合使用,主要目标是实现基于 Web 应用的定时任务管理。以下将详细介绍这个项目中可能涉及的知识点: 1. **Spring 2.5**: - **依赖...

    IntelliJ IDEA中创建Spring boot项目,定时任务测试

    后者是Spring Boot官方推荐的定时任务解决方案。 5. **生成项目结构**:确认无误后,点击“Finish”(完成),IntelliJ IDEA会自动生成项目的结构,包括pom.xml、src/main/java等文件夹。 ### 定时任务配置 1. **...

    Spring mvc + Mybatis + quartz + swagger 定时任务管理[新增、编辑、删除、修改]

    本项目就是基于Spring MVC、Mybatis、Quartz和Swagger实现的一个定时任务管理系统,旨在提供一种灵活且可配置的方式来管理和控制定时任务。下面将详细讲解这个系统的核心组成部分及其工作原理。 首先,Spring MVC是...

    Spring Boot中的@Scheduled注解:定时任务的原理与实现

    通过本文的学习,您已经掌握了如何在Spring Boot应用中使用`@Scheduled`注解来创建和管理定时任务。`@Scheduled`注解不仅简化了定时任务的配置过程,而且还提供了丰富的参数选项,使得开发者能够根据具体的业务需求...

    spring_quartz_定时任务

    Spring通过`@Scheduled`注解提供了一种声明式的方式来创建定时任务,开发者可以在方法上添加此注解,设置定时规则,如cron表达式,来定义任务的执行时间。Spring容器会自动管理这些任务,确保它们在合适的时间被调用...

    Spring+Schedule(定时任务)小示例

    总的来说,Spring Schedule提供了一种优雅的方式来进行定时任务管理,使得开发者能够专注于业务逻辑,而不是底层的调度实现。通过理解并熟练运用这些知识点,可以有效地提高开发效率和系统稳定性。在实际项目中,...

    springmvc+spring+mysql+maven定时任务

    在定时任务方面,Spring提供了一个名为`Task Execution and Scheduling`的模块,可以方便地创建和管理定时任务。 `MySQL`是广泛使用的开源关系型数据库管理系统,适合处理大量数据并支持高并发访问。在定时任务中,...

Global site tag (gtag.js) - Google Analytics