- 浏览: 321144 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
lst923:
...
java 实现图片裁剪 -
kakarottoz:
多谢博主分享,正好用到!
java 实现图片裁剪 -
Vcb:
http://osgi.jxtech.net 是一个完全基于O ...
OSGi介绍 -
Vcb:
是一个完全基于OSGi的开发平台,有在线演示,免费插件可供下 ...
OSGi介绍 -
mikey_5:
谢谢分享,原来设置: style="word-bre ...
td内容自动换行
转自网络,来源不详....
并非应用系统中发生的所有事情都是由用户的动作引起的。有时候,系统自己也需要发起一些动作。例如,集抄系统每天早上六点把抄表数据传送给营销系统。我们有两种选择:或者是每天由用户手动出发任务,或者让应用系统中按照预定的计划自动执行任务。
在Spring中有两种流行配置:Java的Timer类和OpenSymphony的Quartz来执行调度任务。下面以给商丘做的接口集抄900到中间库的日冻结数据传输为例:
1.Java Timer调度器
首先定义一个定时器任务,继承java.util.TimerTask类实现run方法
Run()方法定义了当任务运行时该做什么。jdbc1Service,jdbc2Service通过依赖注入的方式提供给DayDataTimerTask。如果该任务中没有service服务的set方法,则取到的该service服务为null。
其次,在Spring配置文件中声明 dayDataTimerTask:
该声明将DayDataTimerTask放到应用上下文中,并在jdbc1Service、jdbc2Service属性中分别装配jdbc1Service、jdbc2Service。在调度它之前,它不会做任何事情。
属性timerTask告诉ScheduledTimerTask运行哪个TimerTask。再次,该属性装配了指向scheduledDayDataTimerJob的一个引用,它就是DayDataTimerTask。属性period告诉ScheduledTimerTask以怎样的频度调用TimerTask的run()方法。该属性以毫秒作为单位,它被设置为864000000,指定这个任务应该每24小时运行一次。属性delay允许你指定当任务第一次运行之前应该等待多久。在此指定DayDataTimerTask的第一次运行相对于应用程序的启动时间延迟3秒钟。
Spring的TimerFactoryBean负责启动定时任务。属性scheduledTimerTasks要求一个需要启动的定时器任务的列表。在此只包含一个指向scheduledDayDataTimerJob的引用。
Java Timer只能指定任务执行的频度,但无法精确指定它何时运行,这是它的一个局限性。要想精确指定任务的启动时间,就需要使用Quartz[kwɔ:ts]调度器。
2.Quartz调度器
Quartz调度器不仅可以定义每隔多少毫秒执行一个工作,还允许你调度一个工作在某个特定的时间或日期执行。
首先创建一个工作,继承QuartzJobBean类实现executeInternal方法
在Spring配置文件中按照以下方式声明这个工作:
Quartz的org.quartz.Trigger类描述了何时及以怎样的频度运行一个Quartz工作。Spring提供了两个触发器SimpleTriggerBean和CronTriggerBean。SimpleTriggerBean与scheduledTimerTasks类似。指定工作的执行频度,模仿scheduledTimerTasks配置。
一个cron表达式有6个或7个由空格分隔的时间元素。从左至右,这些元素的定义如下:1、秒(0-59);2、分(0-59);3、小时(0-23);4、月份中的日期(1-31);5、月份(1-12或JAN-DEC);6、星期中的日期(1-7或SUN-SAT);7、年份(1970-2099)。
每一个元素都可以显式地规定一个值(如6),一个区间(如9-12),一个列表(如9,11,13)或一个通配符(如*)。“月份中的日期”和“星期中的日期”这两个元素互斥,应该通过设置一个问号(?)来表明你不想设置的那个字段。
我们在此定义该任务在每天凌晨两点半开始启动。
属性triggers接受一组触发器,在此只装配包含simpleDayDataJobTrigger bea和dayDataJobTrigger bean的一个引用列表。
并非应用系统中发生的所有事情都是由用户的动作引起的。有时候,系统自己也需要发起一些动作。例如,集抄系统每天早上六点把抄表数据传送给营销系统。我们有两种选择:或者是每天由用户手动出发任务,或者让应用系统中按照预定的计划自动执行任务。
在Spring中有两种流行配置:Java的Timer类和OpenSymphony的Quartz来执行调度任务。下面以给商丘做的接口集抄900到中间库的日冻结数据传输为例:
1.Java Timer调度器
首先定义一个定时器任务,继承java.util.TimerTask类实现run方法
import java.util.TimerTask; import xj.service.IJdbc1Service; import xj.service.IJdbc2Service; public class DayDataTimerTask extends TimerTask{ private IJdbc2Service jdbc2Service=null; private IJdbc1Service jdbc1Service=null; public void run(){ SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("日冻结转接任务开始时间:"+df.format(Calendar.getInstance().getTime())); System.out.println("日冻结转接任务结束时间:"+df.format(Calendar.getInstance().getTime())); } //通过set方法获取service服务,如果没有该方法,则为null public void setJdbc2Service(IJdbc2Service jdbc2Service) { this.jdbc2Service = jdbc2Service; } public void setJdbc1Service(IJdbc1Service jdbc1Service) { this.jdbc1Service = jdbc1Service; } }
Run()方法定义了当任务运行时该做什么。jdbc1Service,jdbc2Service通过依赖注入的方式提供给DayDataTimerTask。如果该任务中没有service服务的set方法,则取到的该service服务为null。
其次,在Spring配置文件中声明 dayDataTimerTask:
<!-- 声明定时器任务 --> <bean id="dayDataTimerJob" class="xj.action.DayDataTimerTask"> <property name="jdbc1Service"> <ref bean="jdbc1Service"/> </property> <property name="jdbc2Service"> <ref bean="jdbc2Service"/> </property> </bean>
该声明将DayDataTimerTask放到应用上下文中,并在jdbc1Service、jdbc2Service属性中分别装配jdbc1Service、jdbc2Service。在调度它之前,它不会做任何事情。
<!-- 调度定时器任务 --> <bean id="scheduledDayDataTimerJob" class="org.springframework.scheduling.timer.ScheduledTimerTask"> <property name="timerTask"> <ref bean="dayDataTimerJob"/> </property> <property name="delay"> <value>3000</value> </property> <property name="period"> <value>864000000</value> </property> </bean>
属性timerTask告诉ScheduledTimerTask运行哪个TimerTask。再次,该属性装配了指向scheduledDayDataTimerJob的一个引用,它就是DayDataTimerTask。属性period告诉ScheduledTimerTask以怎样的频度调用TimerTask的run()方法。该属性以毫秒作为单位,它被设置为864000000,指定这个任务应该每24小时运行一次。属性delay允许你指定当任务第一次运行之前应该等待多久。在此指定DayDataTimerTask的第一次运行相对于应用程序的启动时间延迟3秒钟。
<!-- 启动定时器 --> <bean class="org.springframework.scheduling.timer.TimerFactoryBean"> <property name="scheduledTimerTasks"> <list> <ref bean="scheduledDayDataTimerJob"/> </list> </property> </bean>
Spring的TimerFactoryBean负责启动定时任务。属性scheduledTimerTasks要求一个需要启动的定时器任务的列表。在此只包含一个指向scheduledDayDataTimerJob的引用。
Java Timer只能指定任务执行的频度,但无法精确指定它何时运行,这是它的一个局限性。要想精确指定任务的启动时间,就需要使用Quartz[kwɔ:ts]调度器。
2.Quartz调度器
Quartz调度器不仅可以定义每隔多少毫秒执行一个工作,还允许你调度一个工作在某个特定的时间或日期执行。
首先创建一个工作,继承QuartzJobBean类实现executeInternal方法
import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.scheduling.quartz.QuartzJobBean; import xj.service.IJdbc1Service; import xj.service.IJdbc2Service; public class DayDataQuartzTask extends QuartzJobBean{ private IJdbc2Service jdbc2Service=null; private IJdbc1Service jdbc1Service=null; protected void executeInternal(JobExecutionContext context) throws JobExecutionException{ SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("日冻结转接任务开始时间:"+df.format(Calendar.getInstance().getTime())); System.out.println("日冻结转接任务结束时间:"+df.format(Calendar.getInstance().getTime())); } //通过set方法获取service服务,如果没有该方法,则为null public void setJdbc2Service(IJdbc2Service jdbc2Service) { this.jdbc2Service = jdbc2Service; } public void setJdbc1Service(IJdbc1Service jdbc1Service) { this.jdbc1Service = jdbc1Service; } }
在Spring配置文件中按照以下方式声明这个工作:
<!-- 定时启动任务 Quartz--> <!—声明工作--> <bean id="dayDataJob" class="org.springframework.scheduling.quartz.JobDetailBean"> <property name="jobClass"> <value>xj.action.DayDataQuartzTask</value> </property> <property name="jobDataAsMap"> <map> <entry key="jdbc1Service"> <ref bean="jdbc1Service"/> </entry> <entry key="jdbc2Service"> <ref bean="jdbc2Service"/> </entry> </map> </property> </bean>
Quartz的org.quartz.Trigger类描述了何时及以怎样的频度运行一个Quartz工作。Spring提供了两个触发器SimpleTriggerBean和CronTriggerBean。SimpleTriggerBean与scheduledTimerTasks类似。指定工作的执行频度,模仿scheduledTimerTasks配置。
<!-- 调度Simple工作 --> <bean id="simpleDayDataJobTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <property name="jobDetail"> <ref bean="dayDataJob"/> </property> <property name="startDelay"> <value>1000</value> </property> <property name="repeatInterval"> <value>86400000</value> </property> </bean> <!—调度cron工作--> <bean id="dayDataJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail"> <ref bean="dayDataJob"/> </property> <property name="cronExpression"> <value>0 30 2 * * ?</value> </property> </bean>
一个cron表达式有6个或7个由空格分隔的时间元素。从左至右,这些元素的定义如下:1、秒(0-59);2、分(0-59);3、小时(0-23);4、月份中的日期(1-31);5、月份(1-12或JAN-DEC);6、星期中的日期(1-7或SUN-SAT);7、年份(1970-2099)。
每一个元素都可以显式地规定一个值(如6),一个区间(如9-12),一个列表(如9,11,13)或一个通配符(如*)。“月份中的日期”和“星期中的日期”这两个元素互斥,应该通过设置一个问号(?)来表明你不想设置的那个字段。
我们在此定义该任务在每天凌晨两点半开始启动。
<!—启动工作--> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="simpleDayDataJobTrigger"/> <ref bean="dayDataJobTrigger"/> </list> </property> </bean>
属性triggers接受一组触发器,在此只装配包含simpleDayDataJobTrigger bea和dayDataJobTrigger bean的一个引用列表。
发表评论
-
hibernate集合映射inverse和cascade详解
2013-05-04 12:14 944网上转载,出处不详 1、到底在哪用cascade=" ... -
java.lang.UnsupportedClassVersionError
2013-04-03 15:33 1125java.lang.UnsupportedClassVersi ... -
Hibernate实体注解
2013-04-03 15:29 1099转自:http://blog.csdn.net/sleepin ... -
转:Maven实战
2013-03-06 12:54 0转自http://www.iteye.com/topic/11 ... -
ASCII字符集详解
2013-02-19 18:03 4957http://www.crifan.com/files/d ... -
安装eclipse windowbuilder
2013-02-17 10:01 2293windowbuilder,就是原来的SWT Designe ... -
点阵输出字符
2013-02-06 13:38 1225http://www.oschina.net/code/sni ... -
Hibernate主键生成策略
2013-01-28 15:50 8621) assigned 主键由外部程 ... -
结束多层循环
2013-01-23 12:28 1467没有啥意义的东西 public static void m ... -
JDBC Batch 批量插入
2013-01-22 17:02 1097JdbcBatchInsert.java import j ... -
JDBC 操作 oracle blob
2013-01-18 10:56 3971jdbc 插入、读取oracle blob字段 pac ... -
java.lang.UnsupportedClassVersionError: Bad version number in .class file
2013-01-17 13:30 938备忘一下: 导入一个工程后,运行时出现java.lang.Un ... -
List<Map> 自定义排序
2012-12-19 13:05 2494对list根据自定义方法排序记要 List list = ... -
后台拼接js代码字符串,处理特殊转义字符
2012-12-13 17:51 5322因为在JS程序代码中,如果生成的字符串中包含特殊字符,那程序容 ... -
java 实现图片裁剪
2012-10-26 15:04 14916import java.awt.Rectangle; i ... -
jar 的使用
2012-10-13 17:39 902偶儿用下,都是临时去查,现在把相关资料记录在这 执行:jav ... -
自动拆箱的bug
2012-10-09 09:13 983在这看到的代码,第二次调用 fun时,出NULL指针异常,看了 ... -
map的三种遍历方法
2012-09-28 16:06 780http://www.cnblogs.com/christ/a ... -
java日期间隔
2012-09-25 16:51 891/** * Date与Date之间的间隔小时 ... -
你能算正确吗
2012-09-10 13:22 854在论坛上看到这段代码,b的值就给算错了,你能算正确吗? pub ...
相关推荐
标题中的“ssh2自动备份mysql数据库 spring定时器”涉及到两个主要技术领域:SSH2(Secure Shell v2)和Spring的定时任务。SSH2是一种安全协议,常用于远程登录和其他安全网络服务,如文件传输。在本场景中,SSH2...
Spring定时器是Spring框架中的一个强大特性,它允许开发者在应用程序中设置定时任务,实现周期性的操作。在本文中,我们将深入探讨Spring定时器的详细使用方法,包括配置、任务调度以及常见应用场景。 首先,Spring...
4. **启动定时任务**:在应用启动时,Spring会扫描并注册所有标记了`@Scheduled`的方法,并按照指定的周期执行。如果你使用的是Spring Boot,可以通过`@EnableScheduling`注解在主配置类上启用定时任务。 通过这样...
`applicationContext-task.xml`是Spring框架中用于配置任务调度的XML文件,通常包含关于如何配置和启动定时任务的信息。 1. **SSH基础**: - SSH协议:提供加密的网络通信,确保了传输的安全性。 - SSH客户端与...
在 SSH(Struts + Spring + Hibernate)框架中,Spring 作为核心层,可以很好地整合这两种定时任务实现方式,根据项目需求灵活选择。在实际应用中,还需要注意任务的异常处理、线程安全以及资源管理等问题,以确保...
Spring框架还提供了`org.springframework.scheduling.timer`和`org.springframework.scheduling.concurrent`两个包,方便在Spring管理的Bean中集成定时任务。例如,可以通过`@Scheduled`注解创建一个定时任务,或者...
Java中的Spring框架集成Quartz任务调度定时器,可以方便地实现复杂的定时任务,极大地提高了应用程序的灵活性和自动化程度。Quartz是一个开源的作业调度框架,由Java编写,它可以独立使用,也可以与J2EE和J2SE应用...
在SSH(Struts2、Spring、Hibernate)框架的网上商城项目中,为了实现首页数据的实时同步,我们需要利用线程和定时器技术。线程使得系统能够并发执行多个任务,而定时器则可以帮助我们定期执行特定任务,从而达到...
在ssh2_quartz这个文件中,可能包含了一个示例项目,演示了如何在SSH(Struts2、Spring、Hibernate)架构下整合Quartz进行定时任务的实现。开发者可以通过分析这个项目,学习如何配置和使用Spring+Quartz,掌握在...
Struts、Hibernate和Spring是Java EE(J2EE)平台上的开源框架,它们共同构成了SSH框架,用于构建高效、可维护的企业级Web应用程序。 1. Struts框架:基于Model-View-Controller(MVC)设计模式,Struts作为控制器...
在这个场景中,我们关注的是一个基于Maven、SSH(Spring、Struts2、Hibernate)框架、Quartz定时任务库以及Zookeeper协调服务的实现。这个系统提供了对分布式任务调度的管理界面,使得任务的创建、监控和管理变得...
在这个场景中,SSH2主要负责应用的安全性和控制层的管理,而DWR则用于实现前端与后端的数据实时交互,使得表格内容能在用户界面上无刷新地更新。 **SSH2(Spring Security)** SSH2是Spring Security的简称,是一个...
SSH(Spring、Struts、Hibernate)是一个常见的Java企业级应用开发框架,而ExtJS则是一个用于构建富客户端Web应用的JavaScript库。将jbpm与SSH和ExtJS结合,可以构建出功能强大、界面友好的流程管理应用。 jbpm.sql...
像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 内容...
在实际应用中,Ajax异步请求刷新通常与后端框架如SSH(Spring、Struts、Hibernate)或如今更流行的Spring Boot、Spring MVC等配合使用。这些框架提供了处理HTTP请求、生成JSON响应以及与数据库交互的能力。 总结...