使用Spring的Quartz方式实现Java定时器功能

      最近在做实时接口时遇到一个实时发短信的功能,要求在每天的9-17-之间定时的发送,对此我采用了Spring 的Quartz方式来实现,现在将其思路大致总结如下:

     Quartz是基于Spring框架之上的更加强大的定时器,它不仅可以轻松的实现定时器的功能,还可实现非常繁复的时间触发执行的任务,以下列出该方式实现定时器的步骤,供以后参考。

1、  首先实现需要定时触发的任务逻辑类和相关方法

  如:要实现一个定时发送短信的功能,需要处理的逻辑步骤有如下几步:

        A:在这个时间段内要发送的短信条数,其短信的内容通常存储在相关的表中(内容包括:电话号码、短信内容、短信的优先级等),通过数据库操作将要发送的短信信息

  取出来。存储到相关的对象中,通过WebService服务发送到相关目标地。

       B:在短信发出成功后,对方将会返回发送的状态(成功或失败),将返回的状态更新到表中

           至此短信发送的逻辑处理完成。

2、   声明一个调用该内容的处理类,进行短信的发送功能。主要代码如下:

         A:声明一个私有的Spring模板属性,并提供其getter/setter方法

                    TransactionTemplate

        B:取得Spring的事务管理器

                      PlatformTransactionManager transactionManager =

                  this.get TransactionTemplate().getTransactionManager();

        C:创建事务

                DefaultTransactionDefinition dtd = newDefaultTransactionDefinition();

        D:设置事务的状态

            Dtd.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUARE);

        E:获取事务的状态

            TransactionStatus status = transactionManager.get transaction(dtd);

        F:调用发送短信的逻辑处理类

        G:提交事务

        H:在catch块进行事务的回滚处理

3、   配置一个调用的xml文件

    Xml文件的格式为Spring框架的jobs.xml配置内容如下:

<beans> 

    <jee:jndi-lookup id=”dataSource” jndi-name=”java:comp/env/jdbc/als”></jee:jndi-lookup>

   <bean id=” transactionManager”class=” org.Springframework.jdbc.dataSource.DataSourceTransactionManager”>

               <prototype name=”dataSource” ref=”dataSource”/>

    </bean>

   <bean id=” transactionTemplate”class=” org.Springframework.transaction.support.TransactionTemplate>

               <prototype name=” transactionManager”ref=” transactionManager”/>

   </bean>

<bean id =”sendMessageInfo”scope=”prototype” class=”此处为第一步所编写的触发任务的处理类的全路径”>

             <prototype name=” transactionTemplate” ref=” transactionTemplate”/>

</bean>

<bean id =”sendMessageJob”class=”org.Springframework.scheduling. Quartz.MethodInvokingJobDetailFactoryBean”>

              <property  name=”targetObject”  ref=” sendMessageInfo”></property>

 <property  name=”targetMethod”  value=” run”></property>

此处value的值run 表示触发业务处理类中的方法名  

</bean>

             <bean id =”sendMessageJobTrigger”class=”org.Springframework.scheduling. Quartz.CronTriggerBean”>

 <property  name=”jobDetail”  ref=” sendMessageJob”></property>

 <property  name=”cronExpression” >

    <value>0 0/1 9-21 **></value>   <!—设置该任务要触发的时间段-->

</property>   

</bean>                     

<bean id =”schedulerFactory”class=”org.Springframework.scheduling. Quartz.SchedulerFactoryBean”>

 <property  name=”triggers”>

     <list>

         <ref bean = “sendMessageJobTrigger”/>

     </list>

</property>

</beans>

4、  在WEB.xml文件中配置第三步配置好的xml文件,当系统初始化时就调用,内容如下:

<listener>

      <listener-class>org.springframework.web.ContextLoaderListener</listener-class>

</listener>

<context-param>

     <param-name>contextConfigLoaction<param-name>

    <param-name>/WEB-INF/jobs.xml<param-name>

</context-param>


猜你喜欢

转载自blog.csdn.net/calvex880714/article/details/17332355