spring定时器怎么实现?spring定时器实现的方法

阳光 2021-03-10 16:18:57 java常见问答 6657

大家在工作中肯定会遇到定时器,而Spring就很好的集成了定时器的功能!那么spring定时器怎么实现?接下来,我们就来给大家讲解一下spring定时器实现的方法。

实现Spring定时器功能,一种是基于xml配置方式,一种是基于注解的方式。

一:基于xml配置的方式

1:编写普通的pojo 类

package com.aflyun.web.task;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
@Component
//@Service 都可以
public class TaskCool
{
    /**
    * 第一个定时器测试方法
    */
    public void testJob()
    {
        System.out.println("test first taskJob .... ");
    }
}

2:配置xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:task="http://www.springframework.org/schema/task"
    xmlns="http://www.springframework.org/schema/beans"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/task 
       http://www.springframework.org/schema/task/spring-task.xsd">
    <context:component-scan base-package="com.aflyun.web" />
    <aop:aspectj-autoproxy proxy-target-class="true" />
    <context:annotation-config />
    <!-- 在applicationContext.xml中进行配置,使用定时器
        ref : pojo类的名称
        method : 调用的方式名称
        cron : cronExpression表达式
        cron="0/5 * * * * ?"  //表示五秒钟执行一次
     -->
    <task:scheduled-tasks>
        <task:scheduled ref="taskCool" method="testJob" cron="0/5 * * * * ?"/>
    </task:scheduled-tasks>
</beans>

注:上面主要的配置文件中一定要加入task的命名空间和schema。

上面 ref=”taskCool”,默认为这个TaskCool 类的首字母小写的值,

若需要修改可以在@Component里面进行修改 ,例如下面

@Component(“taskCoolJob”) 则此时 ref=”taskCoolJon”。

到此基于xml配置完成,运行则可以看到效果!

二:基于注解方式

使用注解方式不需要再每写一个任务类还要在xml文件中配置下,方便了很多。使用Spring的@Scheduled,下面先看一注解@Scheduled在源文件中的定义:

@Target(
{
    java.lang.annotation.ElementType.METHOD
    , java.lang.annotation.ElementType.ANNOTATION_TYPE
})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Scheduled
{
    public abstract String cron();
    public abstract long fixedDelay();
    public abstract long fixedRate();
}

cron:表示指定cron表达式。(cron类型表示 是指定时间触发器触发任务执行!)

fixedDelay:表示从上一个任务完成开始到下一个任务开始的间隔,单位是毫秒。

fixedRate:表示从上一个任务开始到下一个任务开始的间隔,单位是毫秒。

下面进行一下具体的配置过程:

1:编写pojo类

package com.tclshop.cms.center.web.task;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class WebTask
{
    // 每五秒执行一次
    @Scheduled(cron = "0/5 * * * * ?")
    public void TaskJob()
    {
        System.out.println("test second annotation style ...");
    }
}

2:配置xml文件

下面贴出相关的配置文件内容:

<!-- 开启这个配置,spring才能识别@Scheduled注解   -->  
<task:annotation-driven scheduler="qbScheduler" mode="proxy"/> <
task: scheduler id = "qbScheduler"
pool - size = "10" / >

注:理论上只需要加上这句配置就可以了,其他参数都不是必须的。

配置完成,运行就能看到效果!

这些就是spring定时器么实现的两种方法,大家可以根据自己的开发项目去选择适合的方法,其实要说难也不难,只要将逻辑思维弄清楚就可以了。最后大家如果想要了解更多java架构师知识,敬请关注奇Q工具网。

推荐阅读:

java如何做图?实例分享

jsonobject如何转为java对象?json如何解析?

怎么学习java编程?学习java难吗?