`
eyejava
  • 浏览: 1268673 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

spring对定时任务调度集成的总结

阅读更多
1.TimerTask
>>配置文件default-lazy-init="false"如果为true则不会启动Timer

>>INFO [org.springframework.scheduling.timer.TimerFactoryBean] - Initializing Timer
表示启动了定时.

>>但是用AbstractDependencyInjectionSpringContextTests这个类来加载spring的配置文件后虽然启动了定时任务,但是马上执行以下步骤:
Closing application context
Destroying singletons in...
Cancelling Timer
所以定时任务不能执行.
>>如果使用new ClassPathXmlApplicationContext(String[])来加载配置文件,则在Initializing Timer后就程序就退出了,真是怪事.

>>用org.springframework.web.context.ContextLoaderListener 在web应用环境下加载配置文件可以正确执行定时任务.
spring bean配置如下:
<bean id="scheduledTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">
	<property name="delay" value="1000" />
	 <property name="period" value="50000" />
	 <property name="timerTask" ref="scoringService" />
</bean>
<bean id="timerFactory" class="org.springframework.scheduling.timer.TimerFactoryBean">
	  <property name="scheduledTimerTasks">
	        <list>
	            <ref bean="scheduledTask" />
	        </list>
	 </property>
	 <property name="daemon" value="true"/>
</bean>

2.quartz
>>使用autowire by name的禁忌:不要有叫dataSource的bean存在.
见http://eyejava.iteye.com/blog/58281

>>cronExpression和unix cronTab文件的区别
cronTab没有秒 和 年这两个栏位,cronTab 的星期天用0表示,cronExpression用7表示

>>cronExpression:
引用

字段     允许值     允许的特殊字符
秒   0-59   , - * /
分   0-59   , - * /
小时   0-23   , - * /
日期   1-31   , - * ? / L W C
月份   1-12 或者 JAN-DEC   , - * /
星期   1-7 或者 SUN-SAT   , - * ? / L C #
年(可选)   留空, 1970-2099   , - * /
The '*' character is used to specify all values. For example, "*" in the minute field means "every minute".
“*”字符被用来指定所有的值。如:”*“在分钟的字段域里表示“每分钟”。
The '?' character is allowed for the day-of-month and day-of-week fields. It is used to specify 'no specific value'. This is useful when you need to specify something in one of the two fileds, but not the other. See the examples below for clarification.
“?”字符只在日期域和星期域中使用。它被用来指定“非明确的值”。当你需要通过在这两个域中的一个来指定一些东西的时候,它是有用的。看下面的例子你就会明白。
The '-' character is used to specify ranges For example "10-12" in the hour field means "the hours 10, 11 and 12".
“-”字符被用来指定一个范围。如:“10-12”在小时域意味着“10点、11点、12点”。
The ',' character is used to specify additional values. For example "MON,WED,FRI" in the day-of-week field means "the days Monday, Wednesday, and Friday".
“,”字符被用来指定另外的值。如:“MON,WED,FRI”在星期域里表示”星期一、星期三、星期五”.
The '/' character is used to specify increments. For example "0/15" in the seconds field means "the seconds 0, 15, 30, and 45". And "5/15" in the seconds field means "the seconds 5, 20, 35, and 50". Specifying '*' before the '/' is equivalent to specifying 0 is the value to start with. Essentially, for each field in the expression, there is a set of numbers that can be turned on or off. For seconds and minutes, the numbers range from 0 to 59. For hours 0 to 23, for days of the month 0 to 31, and for months 1 to 12. The "/" character simply helps you turn on every "nth" value in the given set. Thus "7/6" in the month field only turns on month "7", it does NOT mean every 6th month, please note that subtlety.
The 'L' character is allowed for the day-of-month and day-of-week fields. This character is short-hand for "last", but it has different meaning in each of the two fields. For example, the value "L" in the day-of-month field means "the last day of the month" - day 31 for January, day 28 for February on non-leap years. If used in the day-of-week field by itself, it simply means "7" or "SAT". But if used in the day-of-week field after another value, it means "the last xxx day of the month" - for example "6L" means "the last friday of the month". When using the 'L' option, it is important not to specify lists, or ranges of values, as you'll get confusing results.
The 'W' character is allowed for the day-of-month field. This character is used to specify the weekday (Monday-Friday) nearest the given day. As an example, if you were to specify "15W" as the value for the day-of-month field, the meaning is: "the nearest weekday to the 15th of the month". So if the 15th is a Saturday, the trigger will fire on Friday the 14th. If the 15th is a Sunday, the trigger will fire on Monday the 16th. If the 15th is a Tuesday, then it will fire on Tuesday the 15th. However if you specify "1W" as the value for day-of-month, and the 1st is a Saturday, the trigger will fire on Monday the 3rd, as it will not 'jump' over the boundary of a month's days. The 'W' character can only be specified when the day-of-month is a single day, not a range or list of days.
The 'L' and 'W' characters can also be combined for the day-of-month expression to yield 'LW', which translates to "last weekday of the month".
The '#' character is allowed for the day-of-week field. This character is used to specify "the nth" XXX day of the month. For example, the value of "6#3" in the day-of-week field means the third Friday of the month (day 6 = Friday and "#3" = the 3rd one in the month). Other examples: "2#1" = the first Monday of the month and "4#5" = the fifth Wednesday of the month. Note that if you specify "#5" and there is not 5 of the given day-of-week in the month, then no firing will occur that month.
The 'C' character is allowed for the day-of-month and day-of-week fields. This character is short-hand for "calendar". This means values are calculated against the associated calendar, if any. If no calendar is associated, then it is equivalent to having an all-inclusive calendar. A value of "5C" in the day-of-month field means "the first day included by the calendar on or after the 5th". A value of "1C" in the day-of-week field means "the first day included by the calendar on or after sunday".


分享到:
评论
10 楼 rainlife 2007-04-09  
下半部分怎么回事啊?根本看不出来,是在解析代码格式的时候出了问题吗?
9 楼 bitlong 2007-03-11  
泄露问题一般是对API是使用或者理解不当造成的。当然不排除程序的BUG,这个概率相对小点
8 楼 downpour 2007-03-09  
Ivan Li 写道
downpour 写道
Ivan Li 写道
使用在web容器中使用quartz要小心了,会造成问题,robbin以前说过这个问题,我在项目中也碰到过服务器内存无法被释放的问题,后来把quartz去掉就好了


我觉得还是要视具体情况而论。也有可能视你的同步程序本身有问题。

我曾经做过一个用于同步的程序,一样在web容器中,使用Spring的封装调用quartz,跑了一年多,一点问题也没有。当然这不是绝对的,要看具体的业务了。

我是用quartz定时发邮件提醒,但是造成了内存泄漏


不妨把你的程序片断发给我看一下,看看问题在哪里。
7 楼 IvanLi 2007-03-09  
downpour 写道
Ivan Li 写道
使用在web容器中使用quartz要小心了,会造成问题,robbin以前说过这个问题,我在项目中也碰到过服务器内存无法被释放的问题,后来把quartz去掉就好了


我觉得还是要视具体情况而论。也有可能视你的同步程序本身有问题。

我曾经做过一个用于同步的程序,一样在web容器中,使用Spring的封装调用quartz,跑了一年多,一点问题也没有。当然这不是绝对的,要看具体的业务了。

我是用quartz定时发邮件提醒,但是造成了内存泄漏
6 楼 dearwolf 2007-03-09  
文章下半部分实在是太乱了
5 楼 downpour 2007-03-09  
Ivan Li 写道
使用在web容器中使用quartz要小心了,会造成问题,robbin以前说过这个问题,我在项目中也碰到过服务器内存无法被释放的问题,后来把quartz去掉就好了


我觉得还是要视具体情况而论。也有可能视你的同步程序本身有问题。

我曾经做过一个用于同步的程序,一样在web容器中,使用Spring的封装调用quartz,跑了一年多,一点问题也没有。当然这不是绝对的,要看具体的业务了。
4 楼 IvanLi 2007-03-09  
http://www.iteye.com/topic/40970
看看这篇贴子4楼,robbin的话在我的项目中得到了证实,所以我不在web 容器里用quartz了,解决方案robbin说了
3 楼 eyejava 2007-03-09  
Ivan Li 写道
使用在web容器中使用quartz要小心了,会造成问题,robbin以前说过这个问题,我在项目中也碰到过服务器内存无法被释放的问题,后来把quartz去掉就好了

有具体点的原因吗? 不能仅仅因为"小心" 两字就不用了吧.
要调用spring管理的bean,又要达到cron表达式的定时配置,不用spring的集成,还有什么更方便的解决办法?
2 楼 Godlikeme 2007-03-09  
后面乱七八糟的,需要整理下。文档里的内容就不要再复制出来了,参考就行了。
1 楼 IvanLi 2007-03-09  
使用在web容器中使用quartz要小心了,会造成问题,robbin以前说过这个问题,我在项目中也碰到过服务器内存无法被释放的问题,后来把quartz去掉就好了

相关推荐

    Spring quartz 定时任务调度

    在Spring框架中集成Quartz,可以充分利用Spring的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)特性,使任务调度更加灵活且易于管理。 1. **Quartz简介** Quartz 是一个完全由Java编写的开源...

    spring整合quartz定时任务调度

    Spring框架作为Java领域广泛使用的轻量级框架,提供了与第三方库Quartz的整合,使得开发者能够轻松地在Spring应用中实现复杂的定时任务调度。Quartz是一款开源的作业调度框架,支持丰富的调度策略,可以满足各种定时...

    spring 任务调度

    Spring的任务调度模块使得开发者能够在应用中轻松地定义和执行定时任务,极大地提高了代码的可维护性和灵活性。 标题"Spring 任务调度"涵盖了Spring框架中的两个主要组件:Spring Task和Quartz Scheduler。Spring ...

    Spring中定时任务

    结合Eclipse和Maven,创建Spring定时任务项目时,你需要: 1. 创建一个新的Maven项目,并添加Spring的相关依赖,如`spring-context`, `spring-context-support`(对于Spring Task),以及`quartz`和`spring-quartz`...

    spring自带定时任务程序

    给定的压缩包可能包含了一个关于如何配置、使用和测试Spring定时任务的文档。这个文档应该详细介绍了每个步骤,包括如何在Spring环境中注册和启动定时任务,如何编写带有`@Scheduled`注解的方法,以及如何编写测试...

    spring定时任务所需jar

    下面我们将深入探讨Spring定时任务所需的相关jar包以及它们的功能。 首先,Spring框架的核心jar包`spring-context.jar`是必不可少的。这个jar包包含了Spring的核心功能,如依赖注入(Dependency Injection,DI)、...

    Spring 定时任务源码(spring 三种定时任务的实现方式)

    在Spring框架中,定时任务是实现系统自动化运行关键任务的重要工具。Spring提供了多种方式来创建和管理定时任务,...在chapter13目录下的文件可能包含了这些源码示例,你可以逐一研究,加深对Spring定时任务的理解。

    spring动态定时调度任务

    总结起来,Spring动态定时调度任务通过结合Quartz和Spring的集成,实现了任务执行时间的灵活性。用户可以根据需求动态地调整任务的触发时间和频率,而无需修改代码或重启服务。这大大提高了系统的可扩展性和适应性,...

    Spring定时任务实现(非Web项目)

    在非Web项目中实现Spring定时任务,主要步骤如下: 1. **配置Spring Task**:在Spring的配置文件(如`applicationContext.xml`或使用Java配置类)中,我们需要启用任务调度功能并配置相应的执行器或调度器。例如,...

    Spring实现任务调度

    首先,Spring提供了两种主要的任务调度机制:Spring内置的`TaskExecution`和`TaskScheduling`以及与Quartz Scheduler的集成。`TaskExecution`和`TaskScheduling`是Spring框架的基础任务调度API,它们允许开发者创建...

    spring定时任务关键jar包(齐全)

    本文将详细探讨Spring定时任务的关键知识点,并与提供的jar包列表关联。 首先,Spring定时任务主要依赖于`spring-context-support`模块,这个模块包含了处理定时任务所需的类和接口。在压缩包`lib`中,应该包含了这...

    spring的三种任务调度实现方式lib

    总结一下,Spring提供了灵活的任务调度方案,涵盖了从简单的定时任务到复杂的批处理作业。了解并熟练掌握这三种方式,可以帮助我们根据项目需求选择合适的任务调度工具,提升应用程序的自动化和效率。

    spring定时任务实现

    此外,Spring Task与Spring框架的集成更加紧密,使得任务调度与业务逻辑的解耦更加自然。 对于Quartz的使用,我们可以通过以下步骤创建一个定时任务: 1. 定义作业类,继承`QuartzJobBean`,并重写`executeInternal...

    Spring 框架自带定时任务和Quartz定时任务

    在这两种方式中,Spring框架提供了自己的定时任务工具Spring Task,以及与专业定时任务框架Quartz集成的能力。 首先,对于Java自带的定时任务实现,我们可以使用java.util.Timer和java.util.TimerTask类。Timer类...

    Spring实现任务调度.rar

    Spring框架提供了强大的任务调度能力,使得开发者能够轻松地集成和管理定时任务。本资料“Spring实现任务调度”将深入探讨如何在Spring中设置和管理定时任务。 首先,我们需要理解Spring中的任务调度机制。Spring...

    spring定时任务依赖的jar包

    1. **Spring Task模块**:这是Spring提供的一个核心模块,用于执行后台任务和定时调度。它提供了两种主要的方式来安排任务:`@Scheduled`注解和`ThreadPoolTaskScheduler`。前者允许在方法上声明定时任务,而后者则...

    spring任务调度(Quartz )

    在本文中,我们将深入探讨如何在Spring中集成Quartz进行任务调度,并通过一个简单的示例来理解其工作原理。 首先,要在Spring中使用Quartz,你需要将`quartz-all-1.5.2.jar`等相关的Quartz库添加到项目的类路径中。...

    quartz2 与spring4 集成 定时任务Job

    总的来说,Quartz2与Spring4的集成提供了一种灵活且可扩展的方式来管理和执行定时任务,结合了Quartz的调度能力和Spring的容器管理优势,使得在Java应用中实现定时任务变得更加简单和高效。同时,通过源码阅读和工具...

    spring执行定时任务的规则

    在Spring框架中,实现定时任务主要依赖于Spring的集成模块Spring Integration或通过集成第三方库如Quartz来完成。本文将重点介绍如何利用Spring框架结合表达式规则来配置和执行定时任务,这些规则与Linux中的crontab...

    定时任务spring3.0

    Spring 3.0版本引入了对定时任务的支持,这是一个非常实用的功能,可以帮助开发者实现定期执行的任务,如数据同步、报表生成等。本文将深入探讨Spring 3.0中的定时任务实现,并结合Quartz库来进一步扩展定时任务的...

Global site tag (gtag.js) - Google Analytics