Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 291|回复: 0

[默认分类] Spring3.0.6定时任务task:scheduled

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-5-24 12:42:18 | 显示全部楼层 |阅读模式


    项目使用的Spring版本比较旧是3.0.6版本,由于需要进行定时任务,就决定使用Spring自带的scheduled task。
    在网上找了很多文章,也查看了Spring3.0.6的官方文档,按照网上和文档所说,可以使用注解或者配置两种方法之一都行,但是我发现单独使用两种方法都不行,怎么配置任务都无法运行。
    最后看到一篇文章说两种方法同时用,才成功执行定时任务,可能是个Bug,我试了下,同时使用注解和XML配置后,任务确实成功执行了。
    XML配置中,只需要配置一个方法即可,其他方法也能跟着运行了,而且XML中配置的定时时间会被注解覆盖掉,只能先这么做了,期待高手解答原因。
    难道真的是Spring3.0.6的Bug??
    Spring配置如下:
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3.        xmlns:jee="http://www.springframework.org/schema/jee"
    4.        xmlns:tx="http://www.springframework.org/schema/tx"
    5.        xmlns:context="http://www.springframework.org/schema/context"
    6.        xmlns:aop="http://www.springframework.org/schema/aop"
    7.        xmlns:task="http://www.springframework.org/schema/task"
    8.        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    9.            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
    10.            http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
    11.            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
    12.            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
    13.        http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd"
    14.        default-lazy-init="true" default-autowire="byName">
    15.     <!-- 配置注解扫描 -->
    16.     <context:annotation-config />
    17.     <!-- 自动扫描的包名 -->
    18.     <context:component-scan base-package="com.demo" />
    19.     <!-- Spring定时器注解开关-->
    20.     <task:annotation-driven />
    21.     <!-- 此处对于定时时间的配置会被注解中的时间配置覆盖,因此,以注解配置为准 -->
    22.     <task:scheduled-tasks scheduler="myScheduler">
    23.         <task:scheduled ref="scheduledTaskManager" method="autoCardCalculate" cron="1/5 * * * * *"/>
    24.     </task:scheduled-tasks>
    25.     <task:scheduler id="myScheduler" pool-size="10"/>
    26.     <aop:aspectj-autoproxy />
    27.     <!-- 加载配置文件 -->
    28.     <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    29.         <property name="locations">
    30.             <list>
    31.                 <value>classpath:config.properties</value>
    32.             </list>
    33.         </property>
    34.     </bean>
    35. </beans>
    复制代码
    执行任务的POJO类如下:
    1. package com.demo.schedule;
    2. import org.apache.log4j.Logger;
    3. import org.springframework.beans.factory.annotation.Autowired;
    4. import org.springframework.scheduling.annotation.Scheduled;
    5. import org.springframework.stereotype.Component;
    6. import java.util.Date;
    7. /**
    8. * Created with IntelliJ IDEA.
    9. * Author:
    10. * Date: 2013-10-09 14:39
    11. * Function: Spring定时任务管理
    12. */
    13. @Component("scheduledTaskManager")
    14. public class ScheduledTaskManager {
    15.     /**
    16.      * cron表达式:* * * * * *(共6位,使用空格隔开,具体如下)
    17.      * cron表达式:*(秒0-59) *(分钟0-59) *(小时0-23) *(日期1-31) *(月份1-12或是JAN-DEC) *(星期1-7或是SUN-SAT)
    18.      */
    19.     /**
    20.      * 定时卡点计算。每天凌晨 02:00 执行一次
    21.      */
    22.     @Scheduled(cron = "0 0 2 * * *")
    23.     public void autoCardCalculate() {
    24.         System.out.println("定时卡点计算... " + new Date());
    25.     }
    26. }
    复制代码


    替换成Sping3.2.2之后,就可以直接在XML中配置,而不需要在方法上使用注解配置时间了。
    感谢4楼,5楼解答
    问题在于Spring全局配置:default-lazy-init="true"
    加上这一句启动的时候还怎么初始化,如果不想改这个配置,那在bean上加个注解
    @Component("scheduledTaskManager")
    @Lazy(value="false")
    public class ScheduledTaskManager {
      //TODO
    }



    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-16 23:29 , Processed in 0.398758 second(s), 37 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表