定时任务

定时任务

jdk的TimerTask

必须会,在程序运行期间动态的启动定时任务。比如30分钟后废除订单

1.从TimerTask类派生任务类,重写run方法
2.实例化Timer对象,schedule方法调度任务。
//实例化Timer对象,schedule方法调度任务。
//延时执行的方法
public class GetDataTask extends TimerTask {
    @Override
    public void run() {
        System.out.println("获取接口数据");

    }
}

//延时执行操作
public class TimerTaskTest {
    public static void main(String[] args) throws ParseException {
        Timer timer = new Timer();
        // 延迟5秒执行,同时每隔5秒执行一次
        timer.schedule(new GetDataTask(),5000,5000);

        // 指定时间执行
        String time = "2020-08-10 18:38:20";
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = format.parse(time);
        timer.schedule(new GetDataTask(),date);
    }
}

spring-task

必须会,在程序启东时,预先定义好了一些定时任务执行。比如每天的8,12,18,22去获取天气数据保存

1.添加spring-context-support.jar
2.开启@Scheduled注解识别<task:annotation-driven>    
3.编写任务类,在任务方法上加@Scheduled(cron="秒 分 时 日 月 周"

在这里插入图片描述

<!--spring.xml-->

<!--@Scheduler定时任务注解识别开关-->
<task:annotation-driven></task:annotation-driven>
@Component
public class GetWeatherTask {

    @Resource
    private RedisService rs;
    // cron表达式,星期和日必有一个是问号
    //cron表达式:秒 分 时 日 月 周 年(可省)
    @Scheduled(cron = "0 * 12 ? * *")
    public void invokeWeatherInterface(){
        String path = "http://api.tianapi.com/txapi/tianqi/index?key=db3d22eebbff236d1b3b424ea12c3dd6&city=郑州";
        RestTemplate t = new RestTemplate();
        String forObject = t.getForObject(path, String.class);
        JSONObject jsonObject = JSON.parseObject(forObject);
        //取jsonObject里的newslist
        JSONArray newslist = jsonObject.getJSONArray("newslist");
        JSONObject currentDay = newslist.getJSONObject(0);
        //newslist的从1-结尾
        List<Object> objects = newslist.subList(1, newslist.size() - 1);
        currentDay.put("futureDays",objects);
        String area = currentDay.getString("area");
        String date = currentDay.getString("date");
        //保存String或hash都可以,都可以做到根据日期获取数据
        String key = RedisKey.WEATHER_KEY+area;
        //放缓存里
        rs.hset(key,date,JSON.toJSONString(currentDay));
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值