我们之前都学过使用quartz框架执行定时调度问题,但是这个配置比较麻烦,所以可以使用spring的@scheduled的注解方式进行调度;
一、配置文件xmlns 添加下面的内容
xmlns:task="http://www.springframework.org/schema/task"
然后xsi:schemaLocation添加下面的内容
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-4.1.xsd
最后是我们的task任务扫描注解
<task:annotation-driven/>
二、调用
三、需要注意的几点:1、spring的@Scheduled注解 需要写在实现上、
2、 定时器的任务方法不能有返回值(如果有返回值,spring初始化的时候会告诉你有个错误、需要设定一个proxytargetclass的某个值为true)
3、实现类上要有组件的注解@Component
四、cron相关参数意义按顺序依次为
· 秒(0~59)
· 分钟(0~59)
· 小时(0~23)
· 天(月)(0~31,但是你需要考虑你月的天数)
· 月(0~11)
· 天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)
· 年份(1970-2099)——@Scheduled是不支持的,spring quartz支持
五、局限性——@Scheduled的cron无法指定执行的年份但是制定到年份,会存在一个问题,就是在你在过了这个时间后再启动项目的时候,他会一直报一个memory leak的错误,大概的意思是你的定时任务将永远不会被执行,导致项目一直启动不了