spring配置定时器

来源:互联网 发布:ubuntu安装numpy 编辑:程序博客网 时间:2024/06/05 08:44

最近做的项目需要调用别人写的接口,而接口使用OAuth2.0进行授权,里面的token值会在一段时间内就过期,所以想着写一个定时器,每隔一段时间自动刷新一下token的值,这样就可以避免token值过期了。

原本想着直接写个线程,设置过期时间,后来发现spring自带定时器,通过一些简单的配置就可以实现定时器的功能,因为我做的项目本身就是使用的spring框架,最终决定使用spring自带的定时器。

在网上找了一些例子,根据一些介绍进行配置,但结果却有些差强人意,一直报一些错,经过一系列的调试最终程序可以正常运行了,特此记录一下,以后就可以直接拿来用了。

第一步applicationContext.xml文件中配置如下代码:

<!-- 定时器 具体要执行任务的类,这里的方法需要自己手动写 -->

<bean id="refreshTokenTimer" class="org.ipph.timer.RefreshTokenTimer"></bean>

<!-- 定时器配置,主要是指定任务类和任务方法,当然也可以设置其它属性 -->

<bean id="timeDitail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

<property name="targetObject" ref="refreshTokenTimer"></property><!-- 指定任务类 -->

<property name="targetMethod" value="execute"></property><!-- 指定任务方法 -->

     <property name="concurrent" value="false" /><!-- 如果前一个任务还没有结束第二个任务不会启动 false --> 

</bean>

<!-- 定义时间间隔触发器 使用CronTriggerFactoryBean,而非CronTriggerBean,与jar包版本有关   -->

<bean id="timeTigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">

<property name="jobDetail" ref="timeDitail"></property>

<property name="cronExpression">

<value>0/3 * * * * ?</value> <!-- 每隔3秒钟触发一次 -->  

</property>

</bean>

<!-- 启动定时器 autowire="no" 不能缺少,否则会报找不到qrtz_triggers表的错误-->

<bean id="startJob" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

<property name="triggers">

<list>

<ref bean="timeTigger"/>  

</list>

</property>

</bean>

第二步在maven的配置文件pom.xml中加入相应依赖信息(相当于一般web项目添加jar包):

<properties><!-- 设置版本号 -->

   <log4j.version>1.2.17</log4j.version>

     <springframework.version>4.2.5.RELEASE</springframework.version>

     <quartz.version>2.2.1</quartz.version> 

   </properties>

<dependency>    

        <groupId>org.springframework</groupId>    

        <artifactId>spring-core</artifactId>    

        <version>${springframework.version}</version>    

    </dependency>    

    <dependency>    

        <groupId>org.springframework</groupId>    

        <artifactId>spring-context-support</artifactId>    

        <version>${springframework.version}</version>    

    </dependency>

    <dependency>    

        <groupId>org.springframework</groupId>    

        <artifactId>spring-tx</artifactId>    

        <version>${springframework.version}</version>    

    </dependency>   

<dependency>

        <groupId>org.quartz-scheduler</groupId>

        <artifactId>quartz</artifactId>

        <version>${quartz.version}</version>

    </dependency>

<dependency>

<groupId>log4j</groupId>

<artifactId>log4j</artifactId>

<version>${log4j.version}</version>

</dependency>

<dependency>

     <groupId>org.slf4j</groupId>

     <artifactId>slf4j-api</artifactId>

     <version>1.6.3</version>

</dependency>

<dependency>

     <groupId>org.slf4j</groupId>

     <artifactId>slf4j-log4j12</artifactId>

     <version>1.6.3</version>

     <scope>test</scope>

</dependency>

Ps:将slf4j-api-1.6.3.jarslf4j-log4j12-1.6.3.jar这两个依赖添加进入,否则会报找不到方法的错,主要是因为jar包版本造成的冲突,需要1.6以上的版本。将jar包引入之后,在重启tomcat之前,需要先将项目clean一下,否则会因为之前引入的jar包与新引入的jar包版本冲突,而造成不必要的错误。

第三步编写自己的业务方法RefreshTokenTimer,系统会默认执行execute方法

package org.ipph.timer;

/**

 * 定时器:每隔3秒打印一次信息

 */

public class RefreshTokenTimer{

public void execute(){

System.out.println("***************************************");

}

}

   通过这样简单的配置,spring的定时器就可以使用了。
原创粉丝点击