spring定時任務詳解(@Scheduled註解)多線程講解

(一)在xml里加入task的命名空間java

<?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:task="http://www.springframework.org/schema/task" 
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        classpath:/org/springframework/beans/factory/xml/spring-beans-4.1.xsd  
        http://www.springframework.org/schema/task 
        http://www.springframework.org/schema/task/spring-task-4.1.xsd">

    <task:annotation-driven />

</beans>

(二)啓用註解驅動的定時任務spring

<?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:task="http://www.springframework.org/schema/task" 
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        classpath:/org/springframework/beans/factory/xml/spring-beans-4.1.xsd  
        http://www.springframework.org/schema/task 
        http://www.springframework.org/schema/task/spring-task-4.1.xsd">

    <task:annotation-driven />

</beans>

(三)定時任務測試

  Class : ATaskspa

package com.xindatai.ibs.liang;

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

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class ATask implements IATask {

    @Scheduled(cron="0/10 * * * * ?")
    public void aTask() {
        try {
            Thread.sleep(20000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        DateFormat df = new SimpleDateFormat("HH:mm:ss");
        System.out.println(df.format(new Date()) + "********A任務每10秒執行一次進入測試");
    }

}

  Class : BTask線程

package com.xindatai.ibs.liang;

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

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class BTask implements IBTask {

    @Scheduled(cron="0/5 * * * * ?")
    public void bTask() {
        System.out.println(new SimpleDateFormat("HH:mm:ss").format(new Date()) + "********B任務每5秒執行一次進入測試");
    }

}

  Console : code

20:11:50********A任務每10秒執行一次進入測試
20:11:50********B任務每5秒執行一次進入測試
20:11:55********B任務每5秒執行一次進入測試
20:12:00********B任務每5秒執行一次進入測試
20:12:20********A任務每10秒執行一次進入測試
20:12:20********B任務每5秒執行一次進入測試
20:12:25********B任務每5秒執行一次進入測試
20:12:30********B任務每5秒執行一次進入測試
20:12:50********A任務每10秒執行一次進入測試
20:12:50********B任務每5秒執行一次進入測試
20:12:55********B任務每5秒執行一次進入測試
20:13:20********A任務每10秒執行一次進入測試
20:13:20********B任務每5秒執行一次進入測試
20:13:25********B任務每5秒執行一次進入測試
20:13:50********A任務每10秒執行一次進入測試
20:13:50********B任務每5秒執行一次進入測試
20:13:55********B任務每5秒執行一次進入測試
20:14:00********B任務每5秒執行一次進入測試
20:14:20********A任務每10秒執行一次進入測試
20:14:20********B任務每5秒執行一次進入測試
20:14:25********B任務每5秒執行一次進入測試
20:14:30********B任務每5秒執行一次進入測試
20:14:50********A任務每10秒執行一次進入測試
20:14:50********B任務每5秒執行一次進入測試
20:14:55********B任務每5秒執行一次進入測試
20:15:20********A任務每10秒執行一次進入測試
20:15:20********B任務每5秒執行一次進入測試
20:15:25********B任務每5秒執行一次進入測試
20:15:30********B任務每5秒執行一次進入測試
20:15:50********A任務每10秒執行一次進入測試
20:15:50********B任務每5秒執行一次進入測試
20:15:55********B任務每5秒執行一次進入測試
20:16:00********B任務每5秒執行一次進入測試
20:16:20********A任務每10秒執行一次進入測試
20:16:20********B任務每5秒執行一次進入測試
20:16:25********B任務每5秒執行一次進入測試
20:16:30********B任務每5秒執行一次進入測試
20:16:50********A任務每10秒執行一次進入測試
20:16:50********B任務每5秒執行一次進入測試
20:16:55********B任務每5秒執行一次進入測試
20:17:20********A任務每10秒執行一次進入測試
20:17:20********B任務每5秒執行一次進入測試
20:17:25********B任務每5秒執行一次進入測試
20:17:30********B任務每5秒執行一次進入測試
20:17:50********A任務每10秒執行一次進入測試
20:17:50********B任務每5秒執行一次進入測試
20:17:55********B任務每5秒執行一次進入測試
20:18:20********A任務每10秒執行一次進入測試
20:18:20********B任務每5秒執行一次進入測試
20:18:25********B任務每5秒執行一次進入測試
20:18:50********A任務每10秒執行一次進入測試
20:18:50********B任務每5秒執行一次進入測試
20:18:55********B任務每5秒執行一次進入測試
20:19:00********B任務每5秒執行一次進入測試
20:19:20********A任務每10秒執行一次進入測試
20:19:20********B任務每5秒執行一次進入測試
20:19:25********B任務每5秒執行一次進入測試
20:19:30********B任務每5秒執行一次進入測試
20:19:50********A任務每10秒執行一次進入測試
20:19:50********B任務每5秒執行一次進入測試
20:19:55********B任務每5秒執行一次進入測試
20:20:20********A任務每10秒執行一次進入測試
20:20:20********B任務每5秒執行一次進入測試
20:20:25********B任務每5秒執行一次進入測試
20:20:50********A任務每10秒執行一次進入測試
20:20:50********B任務每5秒執行一次進入測試
20:20:55********B任務每5秒執行一次進入測試
20:21:00********B任務每5秒執行一次進入測試
20:21:20********A任務每10秒執行一次進入測試
20:21:20********B任務每5秒執行一次進入測試
20:21:25********B任務每5秒執行一次進入測試
20:21:50********A任務每10秒執行一次進入測試
20:21:50********B任務每5秒執行一次進入測試
20:21:55********B任務每5秒執行一次進入測試
20:22:20********A任務每10秒執行一次進入測試
20:22:20********B任務每5秒執行一次進入測試
20:22:25********B任務每5秒執行一次進入測試
20:22:30********B任務每5秒執行一次進入測試
20:22:50********A任務每10秒執行一次進入測試
20:22:50********B任務每5秒執行一次進入測試
20:22:55********B任務每5秒執行一次進入測試
20:23:00********B任務每5秒執行一次進入測試
20:23:20********A任務每10秒執行一次進入測試
20:23:20********B任務每5秒執行一次進入測試
20:23:25********B任務每5秒執行一次進入測試

spring的定時任務默認是單線程多個任務執行起來時間會有問題:B任務會由於A任務執行起來須要20S而被延後20S執行orm

(一)在xml里加入task的命名空間xml

(二)啓用註解驅動的定時任務blog

<?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:task="http://www.springframework.org/schema/task"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        classpath:/org/springframework/beans/factory/xml/spring-beans-4.1.xsd  
        http://www.springframework.org/schema/task 
        http://www.springframework.org/schema/task/spring-task-4.1.xsd">

    <!-- 啓用annotation方式 -->
    <task:annotation-driven scheduler="myScheduler" />

    <!-- 配置任務線程池 -->
    <task:scheduler id="myScheduler" pool-size="5" />

</beans>

  Console : io

啦啦啦

啦啦啦

啦啦啦

啦啦啦

package com.xindatai.ibs.liang;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;import org.springframework.scheduling.annotation.Scheduled;import org.springframework.stereotype.Component;@Componentpublic class ATask implements IATask {@Scheduled(cron="0/10 * * * * ?")public void aTask() {try {Thread.sleep(20000);} catch (InterruptedException e) {e.printStackTrace();}DateFormat df = new SimpleDateFormat("HH:mm:ss");System.out.println(df.format(new Date()) + "********A任務每10秒執行一次進入測試");}}

相關文章
相關標籤/搜索