版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jasnet_u/article/details/84128340
spring-task是Spring3.0以后自主开发的定时任务工具,我们可以将它比作一个轻量级的Quartz,而且使用起来很简单,除spring相关的包外不需要额外的包,而且支持注解和配置文件两种配置方式。
一、使用注解配置(spring)
1、pom.xml中引入spring的一些基础包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.20.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.20.RELEASE</version>
</dependency>
2、spring.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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:cache="http://www.springframework.org/schema/cache"
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.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
http://www.springframework.org/schema/cache
http://www.springframework.org/schema/cache/spring-cache-4.3.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-4.3.xsd">
<!-- 项目包扫描-->
<context:component-scan base-package="com.tingcream.springTask1">
</context:component-scan>
<!-- task 注解驱动支持 重要-->
<task:annotation-driven/>
<!-- 指定sheduler 线程池大小,否则默认为单线程 -->
<task:scheduler id="scheduler" pool-size="10"/>
</beans>
注意spring.xml中引入xmlns:task 的名称空间和schema地址,即
xmlns:task="http://www.springframework.org/schema/task"
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-4.3.xsd
3、任务bean
package com.tingcream.springTask1;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class MyTask {
//@Scheduled(fixedDelay=1000)// fixedDelay:表示从上一次任务执行结束到下一次任务开始的时间间隔 毫秒
//@Scheduled(fixedRate=3000)//fixedRate:表示从上一次任务开始到下一次任务开始的时间间隔 毫秒
@Scheduled(cron = "*/3 * * * * ?")// cron:表示使用cron表达式来表示调度周期(日历) 功能最为强大
public void work1 () {
Thread t = Thread.currentThread();
System.out.println(t.getName()+"::work1执行:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) );
}
@Scheduled(cron = "*/3 * * * * ?")
public void work2 () {
Thread t = Thread.currentThread();
System.out.println(t.getName()+"::work2执行:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) );
}
}
二、使用xml配置文件(spring)
1、pom.xml中引入spring的一些基础包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.20.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.20.RELEASE</version>
</dependency>
2、spring.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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:cache="http://www.springframework.org/schema/cache"
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.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
http://www.springframework.org/schema/cache
http://www.springframework.org/schema/cache/spring-cache-4.3.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-4.3.xsd">
<!-- 项目包扫描-->
<context:component-scan base-package="com.tingcream.springTask2">
</context:component-scan>
<task:scheduler id="scheduler" pool-size="10"/>
<task:scheduled-tasks>
<task:scheduled ref="myJob" method="work1" cron="*/1 * * * * ?"/>
<task:scheduled ref="myJob" method="work2" cron="*/1 * * * * ?"/>
</task:scheduled-tasks>
</beans>
3、任务bean
package com.tingcream.springTask2;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.stereotype.Component;
@Component
public class MyJob {
public void work1 () {
Thread t = Thread.currentThread();
System.out.println(t.getName()+"::work1执行:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) );
}
public void work2 () {
Thread t = Thread.currentThread();
System.out.println(t.getName()+"::work2执行:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) );
}
}
三、springboot项目中使用springTask
1、pom.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<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.ruihao</groupId>
<artifactId>springTask3</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>springTask3</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.17.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2、springboot启动类,添加@EnableScheduling注解开启task支持
package com.tingcream.springTask3;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class SpringTask3Application {
public static void main(String[] args) {
SpringApplication.run(SpringTask3Application.class, args);
}
}
3、任务bean
@Component
public class MyJob {
private int count=0;
@Scheduled(cron="*/2 * * * * ?")
private void run(){
count++;
System.out.println("[" + Thread.currentThread().getName() + "]" + "MyJob 执行 "+(count));
}
}
@Component
public class MyJob2 {
private int count=0;
@Scheduled(cron="*/2 * * * * ?")
private void run(){
count++;
System.out.println("[" + Thread.currentThread().getName() + "]" + "MyJob2 执行 "+(count));
}
}
3、配置task的多线程支持
package com.tingcream.springTask3.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
@Configuration
@EnableScheduling
public class SchedulerConfig {
@Bean
public TaskScheduler taskScheduler() {
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
//线程池大小
scheduler.setPoolSize(10);
//线程名字前缀
scheduler.setThreadNamePrefix("spring-task-thread");
return scheduler;
}
}