Spring 指南(调度任务)

栏目: Java · 发布时间: 5年前

内容简介:本指南将指导你完成使用Spring调度任务的步骤。你将构建一个应用程序,使用Spring的请执行以下操作:

调度任务

本指南将指导你完成使用Spring调度任务的步骤。

将要构建什么

你将构建一个应用程序,使用Spring的 @Scheduled 注解每五秒打印一次当前时间。

需要什么

  • 大约15分钟
  • 最喜欢的文本编辑器或IDE
  • JDK 1.8 或更高版本
  • Gradle 4+Maven 3.2+
  • 你还可以将代码直接导入IDE:

    • Spring Tool Suite(STS)
    • IntelliJ IDEA

如何完成本指南

请执行以下操作:

  • 下载 并解压缩本指南的源存储库,或使用Git克隆它:

    git clone https://github.com/spring-guides/gs-scheduling-tasks.git
  • 进入 gs-scheduling-tasks/initial

完成后,你可以根据 gs-scheduling-tasks/complete 中的代码检查结果。

创建调度任务

现在你已经设置了项目,可以创建调度任务。

src/main/java/hello/ScheduledTasks.java
package hello;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class ScheduledTasks {

    private static final Logger log = LoggerFactory.getLogger(ScheduledTasks.class);

    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

    @Scheduled(fixedRate = 5000)
    public void reportCurrentTime() {
        log.info("The time is now {}", dateFormat.format(new Date()));
    }
}

Scheduled 注解定义特定方法何时运行,注意:此示例使用 fixedRate ,它指定从每次调用的开始时间计算的方法调用之间的间隔。还有其他选项,例如 fixedDelay ,它指定从完成任务计算的调用之间的间隔,你还可以使用 @Scheduled(cron=". . .") 表达式进行更复杂的任务调度

启用调度

虽然调度任务可以嵌入到Web应用程序和WAR文件中,但下面演示的更简单的方法创建了一个独立的应用程序,将所有内容打包在一个可执行的JAR文件中,由 main() 方法驱动。

src/main/java/hello/Application.java
package hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableScheduling
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class);
    }
}

@SpringBootApplication 是一个方便的注解,添加了以下所有内容:

  • @Configuration 将类标记为应用程序上下文的bean定义源。
  • @EnableAutoConfiguration 告诉Spring Boot根据类路径设置、其他bean和各种属性设置开始添加bean。
  • 通常你会为Spring MVC应用添加 @EnableWebMvc ,但Spring Boot会在类路径上看到 spring-webmvc 时自动添加它,这会将应用程序标记为Web应用程序并激活关键行为,例如设置 DispatcherServlet
  • @ComponentScan 告诉Spring在 hello 包中查找其他组件、配置和服务,允许它找到控制器。

main() 方法使用Spring Boot的 SpringApplication.run() 方法来启动应用程序,你是否注意到没有一行XML?也没有 web.xml 文件,此Web应用程序是100%纯Java,你无需处理配置任何管道或基础结构。

@EnableScheduling 确保创建后台任务执行程序,没有它,就没有任何调度。

构建可执行的JAR

你可以使用Gradle或Maven从命令行运行该应用程序,或者,你可以构建一个包含所有必需依赖项、类和资源的可执行JAR文件,并运行它,这使得在整个开发生命周期中、跨不同环境等将服务作为应用程序发布、版本和部署变得容易。

如果你使用的是Gradle,则可以使用 ./gradlew bootRun 运行该应用程序,或者你可以使用 ./gradlew build 构建JAR文件,然后你可以运行JAR文件:

java -jar build/libs/gs-scheduling-tasks-0.1.0.jar

如果你使用的是Maven,则可以使用 ./mvnw spring-boot:run 运行该应用程序,或者你可以使用 ./mvnw clean package 构建JAR文件,然后你可以运行JAR文件:

java -jar target/gs-scheduling-tasks-0.1.0.jar

上面的过程将创建一个可运行的JAR,你也可以选择构建经典WAR文件。

显示日志输出,你可以从日志中看到它在后台线程上,你应该看到你的调度任务每5秒出发一次:

[...]
2016-08-25 13:10:00.143  INFO 31565 --- [pool-1-thread-1] hello.ScheduledTasks : The time is now 13:10:00
2016-08-25 13:10:05.143  INFO 31565 --- [pool-1-thread-1] hello.ScheduledTasks : The time is now 13:10:05
2016-08-25 13:10:10.143  INFO 31565 --- [pool-1-thread-1] hello.ScheduledTasks : The time is now 13:10:10
2016-08-25 13:10:15.143  INFO 31565 --- [pool-1-thread-1] hello.ScheduledTasks : The time is now 13:10:15

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Pro JavaScript Design Patterns

Pro JavaScript Design Patterns

Dustin Diaz、Ross Harmes / Apress / 2007-12-16 / USD 44.99

As a web developer, you’ll already know that JavaScript™ is a powerful language, allowing you to add an impressive array of dynamic functionality to otherwise static web sites. But there is more power......一起来看看 《Pro JavaScript Design Patterns》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具