spring3中springTask定时任务

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
    }
}
 

猜你喜欢

转载自blog.csdn.net/jasnet_u/article/details/84128340