sping MVC 定时任务的设置

  项目中用到了定时任务,写一篇随笔记录一下。

  首先在Spring的配置文件ApplicationContext.xml文件的beans标签中添加

xmlns:task="http://www.springframework.org/schema/task"
http://www.springframework.org/schema/task 
http://www.springframework.org/schema/task/spring-task-4.1.xsd

  目前我了解的有两种方式使用定时任务:

  1.在配置文件中声明定时任务的调用

  先在ApplicationContext.xml文件中声明调用的bean

<bean id="quartzController" class="com.bizdata.common.socket.web.resource.QuartzTaskController"></bean>

  调用的java方法及代码如下

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

import org.springframework.stereotype.Controller;

@Controller
public class QuartzTaskController {
    
    public void sysTime(){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sdf.format(new Date()));
    }

}

  然后声明调用对象和调用对象的方法

<!-- 定义调用对象和调用对象的方法 -->
    <bean id="myJobDetailA"
          class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="quartzController">  <!--执行定时类-->
        </property>
        <property name="targetMethod" value="sysTime"></property>   <!--执行定时的方法-->
        <property name="concurrent" value="false" />
        <!-- 是否允许任务并发执行。当值为false时,表示必须等到前一个线程处理完毕后才再启一个新的线程 -->
    </bean>
    <!-- 定义触发时间 -->
    <bean id="myTriggersA"
          class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail" ref="myJobDetailA">
        </property>
        <property name="cronExpression">
            <value>0 00 6 * * ?</value>    <!--定时时间-->
            <!--时间大小由小到大排列,从秒开始,顺序为 秒,分,时,天,月,年    *为任意 ?为无限制-->
        </property>
    </bean>

  以上即完成定时任务的设置,每天早上6点调用。

  2.通过注解调用(推荐方法,会省很多配置,方便使用)

  ApplicationContext.xml文件中声明bean自动扫描:

<!-- 开启注解注入bean的支持 -->
    <context:annotation-config />
    <context:component-scan base-package="com.bizdata" />

  同时添加注解调用的配置

<task:annotation-driven/> <!-- 用定时器注解 -->

  java代码

  @Scheduled(cron="0 0 22 * * ?")
    public boolean getDataCenterData(){
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DATE, -1);
        return getDataCenterData(calendar.getTime());
    }

  完成定时任务使用,每天22点调用。

  使用以上配置的注解方式调用定时任务时会打印出异常日志,但不影响使用,可以在log4j.properties文件添加一下日志等级过滤即可。

#定时器日志级别
log4j.logger.org.springframework.scheduling = INFO

  

猜你喜欢

转载自www.cnblogs.com/guaniu2750/p/11953338.html