美文网首页技术干货
Spring的@Scheduled注解定时任务

Spring的@Scheduled注解定时任务

作者: 金琥 | 来源:发表于2017-09-06 22:43 被阅读81次

    spring提供了@scheduled注解来实现定时任务
    需要注意的几点:
    1、spring的@Scheduled注解 ,需要写在实现上、
    2、定时器的任务方法不能有返回值(有返回值的场景去google)
    3、定时器是单线程的
    优点:实现中出现exception或者error没有捕获的情况,并不会导致线程退出,只会导致本次执行中断退出,下一次还会再执行。
    缺点:单线程的情况下,如果有多个方法都被注解了,就会排队执行。
    例如,存在run(),test()两个方法,都用注解间隔5s执行一次的方式执行,实际执行会是
    run()-5s-test()-5s-run(),也就是说两次执行之间间隔了10s;
    如果run()方法执行完毕就要8s,则会呈现run()-8s-test()-5s-run()
    两次执行间隔了13s

    可以通过改配置的方式实现任务并行执行。
    xmlns 多加下面的内容

    <xmlns:task="http://www.springframework.org/schema/task"  >
    

    xsi:schemaLocation多加下面的内容

    http://www.springframework.org/schema/task  
    http://www.springframework.org/schema/task/spring-task-4.0.xsd  
    

    然后配置pool-size来设定多少并发

    <task:scheduler id="myScheduler1" pool-size="2"/>
    

    如上就会有2个线程来执行定时任务了。

    springboot中,通过下面注解来引入xml配置文件

    @SpringBootApplication
    @EnableScheduling
    @ImportResource("classpath*:sch.xml")
    @Component("MyTest")
    public class MyTest{
      ……
    }
    

    也可以不用@Scheduled注解,直接用xml配置,一个完整的xml示例

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:task="http://www.springframework.org/schema/task"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
                               http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd">
    <task:scheduler id="myScheduler1" />
    <task:scheduler id="myScheduler2" />
    <task:scheduled-tasks scheduler="myScheduler1">
        <task:scheduled ref="MyTest" method="test1" fixed-delay="2000"/>
        <task:scheduled ref="MyTest" method="test2" fixed-delay="2000"/>
    </task:scheduled-tasks>
    <task:scheduled-tasks scheduler="myScheduler2">
        <task:scheduled ref="MyTest" method="test3" fixed-delay="5000"/>
    </task:scheduled-tasks>
    </beans>
    

    相关文章

      网友评论

        本文标题:Spring的@Scheduled注解定时任务

        本文链接:https://www.haomeiwen.com/subject/jtnvjxtx.html