前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从Spring的@Scheduled说起

从Spring的@Scheduled说起

作者头像
春哥大魔王
发布2018-07-23 11:35:39
5050
发布2018-07-23 11:35:39
举报

通过Spring的@Scheduled可以创建定时任务。

  • 引入 xmlns:task 命名空间;
  • 在task任务执行类引入注解:@Component@EnableScheduling;
  • 配置定时执行任务:@Scheduled(cron = "0/10 * * * * *");

任务执行task:

代码语言:javascript
复制
@Component@EnableSchedulingpublic class TestDaemon {    @Scheduled(cron = "0/10 * * * * *")    public void testRunTask(){        try {
            Thread.sleep(20000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        DateFormat df = new SimpleDateFormat("HH:mm:ss");
        System.out.println(df.format(new Date()) + "********A任务每10秒执行一次进入测试");
    }
}    @Scheduled(cron = "0/5 * * * * *")    private void fullQueueTask() {
        System.out.println(new SimpleDateFormat("HH:mm:ss").format(new Date()) + "********B任务每5秒执行一次进入测试");
    }

跑起来:

代码语言:javascript
复制
13:21:25********B任务每5秒执行一次进入测试
13:21:30********B任务每5秒执行一次进入测试
13:21:50********A任务每10秒执行一次进入测试
13:21:50********B任务每5秒执行一次进入测试
13:21:55********B任务每5秒执行一次进入测试
13:22:00********B任务每5秒执行一次进入测试
13:22:20********A任务每10秒执行一次进入测试
13:22:20********B任务每5秒执行一次进入测试
13:22:25********B任务每5秒执行一次进入测试

我们发现B并没有每隔5秒钟执行,而是当A任务启动后,B任务需要等待A任务执行完成之后继续执行。 这是因为默认的@Scheduled是单线程执行的,所有任务需要互相排队。

我们在业务上肯定需要不同调度任务有自己的节奏,单线程是满足不了了,Spring为我们提供了多线程的调度方式。

XML:

代码语言:javascript
复制
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://www.springframework.org/schema/beans"
       xmlns:task="http://www.springframework.org/schema/task"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd">

    <task:annotation-driven scheduler="myScheduler" />
    <!-- 配置任务线程池 -->
    <task:scheduler id="myScheduler" pool-size="5" /></beans>

引入xml:

代码语言:javascript
复制
<import resource="server-task.xml" />

再次执行:

代码语言:javascript
复制
13:26:00********B任务每5秒执行一次进入测试
13:26:05********B任务每5秒执行一次进入测试
13:26:10********B任务每5秒执行一次进入测试
13:26:15********B任务每5秒执行一次进入测试
13:26:20********B任务每5秒执行一次进入测试
13:26:20********A任务每10秒执行一次进入测试
13:26:25********B任务每5秒执行一次进入测试
13:26:30********B任务每5秒执行一次进入测试
13:26:35********B任务每5秒执行一次进入测试
13:26:40********B任务每5秒执行一次进入测试
13:26:45********B任务每5秒执行一次进入测试
13:26:50********A任务每10秒执行一次进入测试
13:26:50********B任务每5秒执行一次进入测试
13:26:55********B任务每5秒执行一次进入测试

我们发现B任务是按照自己的节奏进行,每隔5秒执行一次。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 春哥talk 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档