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

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

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

定时功能配置:




























这样配置完就可以了! 注意
时间的设置格式。

配置完之后 我就部署到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





${jdbc.connection.driver_class}


${jdbc.connection.url}


${jdbc.username}


${jdbc.password}


${testWhileIdle}



${testOnBorrow}


${testOnReturn}


${validationQuery}



${timeBetweenEvictionRunsMillis}


${numTestsPerEvictionRun}




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

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

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

你可能感兴趣的:(Spring 管理定时任务时,服务器不起作用,解决方法。)