博客详情

spring3中springTask定时任务 (原创)

作者: 朝如青丝暮成雪
发布时间:2018-11-16 07:42:34  文章分类:spring   阅读(844)  评论(0)

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;
    }
}
 


关键字:  springTask  spring
评论信息
暂无评论
发表评论

亲,您还没有登陆,暂不能评论哦! 去 登陆 | 注册

博主信息
   
数据加载中,请稍候...
文章分类
   
数据加载中,请稍候...
阅读排行
 
数据加载中,请稍候...
评论排行
 
数据加载中,请稍候...

Copyright © 叮叮声的奶酪 版权所有
备案号:鄂ICP备17018671号-1

鄂公网安备 42011102000739号