026_Scheduled定时任务器

1. Scheduled定时任务器, 是Spring3.0以后自带的一个定时任务器。

2. 使用maven构建SpringBoot的名叫spring-boot-scheduled项目

026_Scheduled定时任务器

3. 添加对Scheduled支持的坐标 

026_Scheduled定时任务器

4. pom.xml 

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

	<modelVersion>4.0.0</modelVersion>
	<groupId>com.bjbs</groupId>
	<artifactId>spring-boot-scheduled</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.13.RELEASE</version>
	</parent>

	<!-- 修改jdk版本 -->
	<properties>
		<java.version>1.8</java.version>
		<!-- 指定thymeleaf和thymeleaf-layout-dialect高版本可以防止html标签不规范报错 -->
		<thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>
		<thymeleaf-layout-dialect.version>2.0.4</thymeleaf-layout-dialect.version>
	</properties>

	<dependencies>
		<!-- springBoot的启动器 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- springBoot thymeleaf的启动器 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-thymeleaf</artifactId>
		</dependency>

		<!-- 添加对Scheduled支持的坐标 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
		</dependency>
	</dependencies>
</project>

5. 新建UserService.java

package com.bjbs.service;

import org.springframework.stereotype.Service;

@Service
public class UserService {
	public void addUser() {
		System.out.println("Add User......");
	}
}

6. 新建ScheduledDemo.java

package com.bjbs.scheduled;

import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import com.bjbs.service.UserService;

/**
 * Scheduled定时任务
 */
@Component
public class ScheduledDemo {
	@Autowired
	private UserService userService;
	
	/**
	 * 定时任务方法
	 * 
	 * @Scheduled: 设置定时任务 cron属性: cron表达式。定时任务触发是时间的一个字符串表达形式
	 */
	@Scheduled(cron = "0/2 * * * * ?")
	public void scheduledMethod() {
		System.out.println("定时器被触发: " + new Date());
		
		userService.addUser();
	}
}

7. 新建App.java

package com.bjbs;

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

/**
 * SpringBoot启动类
 */
@SpringBootApplication
@EnableScheduling // 在启动类上, 添加开启定时任务的注解
public class App {
	public static void main(String[] args) {
		SpringApplication.run(App.class, args);
	}
}

8. 运行项目

026_Scheduled定时任务器

9. cron表达式讲解

9.1. cron表达式是一个字符串, 分为6或7个域, 每一个域代表一个含义, 两种语法格式:

9.1.1. Seconds Minutes Hours Day Month Week

9.1.2. Seconds Minutes Hours Day Month Week Year

9.2. corn从左到右用空格隔开: 秒 分 小时 月份中的日期 月份 星期 年份。

9.3. cron表达式的时间字段除允许设置数值外, 还可使用一些特殊的字符, 提供列表、范围、通配符等功能。

9.4. 各字段的含义

位置

时间域名

允许值

允许的特殊字符

1

0-59

, - * /

2

分钟

0-59

, - * /

3

小时

0-23

, - * /

4

1-31

, - * ? / L W C

5

1-12

, - * /

6

星期

1-7

, - * ? / L C #

7

年(可选)

1970-2099

, - * /

9.5. 星号(*): 可用在所有字段中, 表示对应时间域的每一个时刻, 例如: *在分钟字段时, 表示"每分钟"。

9.6. 问号(?): 该字符只在月份中的日期和星期字段中使用, 它通常指定为"无意义的值", 相当于占位符。

9.7. 减号(-): 表达一个范围, 如在小时字段中使用"10-12", 则表示从10到12点, 即: 10,11,12。

9.8. 逗号(,): 表达一个列表值, 如在星期字段中使用"MON,WED,FRI", 则表示星期一、星期三和星期五。

9.9. 斜杠(/): x/y表达一个等步长序列, x为起始值, y为增量步长值。如在分钟字段中使用0/15, 则表示为0,15,30和45秒; 而5/15在分钟字段中表示5,20,35,50; 你也可以使用*/y, 它等同于0/y。

9.10. L: 该字符只在月份中的日期和星期字段中使用, 代表"Last"的意思。L在日期字段中, 表示这个月份的最后一天, 如: 一月的31号, 非闰年二月的28号。如果L用在星期中, 则表示星期六, 等同于7。但是, L在星期字段里, 而且在前面有一个数值D, 则表示"这个月的最后星期D", 例如: 6L表示该月的最后星期五。

9.11. W: 该字符只能出现在月份中的日期字段里, 是对前导日期的修饰, 表示离该日期最近的工作日。例如: 15W表示离该月15号最近的工作日, 如果该月15号是星期六, 则匹配14号星期五; 如果15日是星期日, 则匹配16号星期一; 如果15号是星期二, 那结果就是15号星期二。但必须注意关联的匹配日期不能够跨月, 如你指定1W, 如果1号是星期六, 结果匹配的是3号星期一, 而非上个月最后的那天。W字符串只能指定单一日期, 而不能指定日期范围。

9.12. LW组合: 在月份中的日期字段可以组合使用LW, 它的意思是当月的最后一个工作日。

9.13. 井号(#): 该字符只能在星期字段中使用, 表示当月某个工作日。如: 6#3表示当月的第三个星期五(6表示星期五, #3表示当前的第三个), 而4#5表示当月的第五个星期三, 假设当月没有第五个星期三,  忽略不触发。

9.14. C: 该字符只在月份中的日期和星期字段中使用, 代表"Calendar"的意思。它的意思是计划所关联的日期, 如果日期没有被关联, 则相当于日历中所有日期。例如: 5C在日期字段中就相当于日历5日以后的第一天。 1C在星期字段中相当于星期日后的第一天。

9.15. cron表达式对特殊字符的大小写不敏感, 对代表星期的缩写英文大小写也不敏感。

上一篇:搭建ssm踩坑


下一篇:基于SSM架构设计的仓库管理系统