Spring Task 定时任务

 2022-09-09
原文地址:https://cloud.tencent.com/developer/article/1040039

推荐使用基于配置XML的形式 !!!

         //首先要定义schema 空间
         <?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.springframe            work.org/schema/task"  
            xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.o            rg/schema/beans/spring-beans.xsd  
            http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring            -task-3.0.xsd">  
            
         //先来一种 比较笨重的方法  ...要是多个定时任务 就有点吐啦
                 <bean id="schedule" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    	        <property name="triggers">
    				<list>
    					<ref bean="testTrigger" />
    				</list>
    			</property>
    		</bean>
    
    	     <bean id="testTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
    			<property name="jobDetail" ref="testJobDetail" />
    			<property name="cronExpression" value="0 0/1 * * * ?" />
    	    </bean>
    
    	    <bean id="testJobDetail"
    		class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    			<property name="targetObject" ref="targetTestService" />  <!--定时任务的类-->
    			<property name="targetMethod" value="job1" /> <!--要执行的方法-->
    		</bean>
    
    	   <bean id="targetTestService" class="com.tepusoft.web.TaskJob"
    			scope="prototype">
    	  </bean>

再来一个比较简洁的多定时任务的配置(推荐)

        <task:annotation-driven /> <!-- 定时器开关,一定要加-->  
        <bean id="taskTest" class="com.tepusoft.web.TaskJob"></bean>  <!--定时任务的类-->
        <task:scheduled-tasks>   <!--这里面可以定义多个定时任务-->
            <task:scheduled ref="taskTest" method="job1" cron="5/3 * * * * ?" />  
        </task:scheduled-tasks>

基于注解的方式:

            <task:executor id="executor" pool-size="5" />
    	<task:scheduler id="scheduler" pool-size="10" />
    	<task:annotation-driven executor="executor" scheduler="scheduler" />
    
            // 定义  POJO 定时任务类 (基于注解的)  一定要spring容器扫描到哟
            /**
             * Spring3 @Scheduled 演示
             * @author GIE 2015年8月10日22:11:17
             */
            @Component
            public class SpringTaskDemo {
    	    @Scheduled(cron = "0/5 * * * * *")
    	    void doSomethingWith(){
    		System.out.println("I'm doing with cron now!");
    	}
        }