spring定时任务

最近在工作中,主管分给我了微信推送的任务(微信开发自己研究了一下,抽空会写写),这个推送任务要求是定时任务的模板消息推送,于是就用了schedule方法搞了一下 // 设定指定任务task在指定时间time执行 schedule(TimerTask task, Date time)
public void timer() {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
System.out.println("-------任务内容--------");
}
}, 2000);// 设定指定的时间time,此处为2000毫秒 } 但是有个问题很尴尬,就是要求功能在项目启动的时候就执行,也就是tomcat startup的时候就在等待时间点执行了,那么我写的这个方法就不好找到触发点,之前很2b的在登录功能逻辑里面调用了一下,导致每次有人登录都会执行一次推送,然后我想如果写成static方法 每次启动就被实例化一次,问题就可以解决了,是可以的,但是我的很多变量都会被用到,而且有些公共方法在执行run的时候也会被调用,不能所有方法都改成静态的吧?于是就有了新的解决方法: spring自带的定时任务功能 (一)在xml里加入task的命名空间

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

(二)启用注解驱动的定时任务 <task:annotation-driven scheduler="myScheduler"/>

(三)配置定时任务的线程池

推荐配置线程池,若不配置多任务下会有问题。后面会详细说明单线程的问题。

<task:scheduler id="myScheduler" pool-size="5"/>

(四)写我们的定时任务 @Scheduled注解为定时任务,cron表达式里写执行的时机

[java] view plain copy package com.mvc.task.impl;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.concurrent.TimeUnit;
import org.joda.time.DateTime;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import com.mvc.task.IATask;
@Component
public class ATask implements IATask{
@Scheduled(cron="0/10 * * * * ? ") //每10秒执行一次
@Override
public void aTask(){
try {
TimeUnit.SECONDS.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(DateTime.now().toDate())+"*********A任务每10秒执行一次进入测试");
}
}
[java] view plain copy package com.mvc.task.impl;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import org.joda.time.DateTime;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import com.mvc.task.IBTask;
@Component
public class BTask implements IBTask{
@Scheduled(cron="0/5 * * * * ? ") //每5秒执行一次
@Override
public void bTask(){
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(DateTime.now().toDate())+"*********B任务每5秒执行一次进入测试");
}
}
博文引用来自 https://blog.csdn.net/qq_33556185/article/details/51852537

转载于:https://my.oschina.net/u/3652253/blog/1788112

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值