欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

@Scheduled项目中用到的一个小知识点

程序员文章站 2022-07-03 16:10:44
...

今天写东西的时候需要在自定义的请求类中去设置请求的seeionid,于是就写了一个工具类 记录一下;

package com.energetic.energetic.util.scheduler;


import com.alibaba.fastjson.JSONObject;
import com.energetic.energetic.service.face.sense.SenseBoxDbService;
import com.energetic.energetic.util.ResponseResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;


/**
 * 初始化学生人员宿舍信息
 * @author Administrator
 *
 */
@Component //factory
public class SenseBoxLoginScheduler {

    @Autowired
    private SenseBoxDbService senseBoxDbService;

    public static  String  variable="";

    /**
     * 每天中午十二点
     */
    //@Scheduled(cron="*/5 * * * * ?") //没5秒执行一次
    @Scheduled(fixedDelay = 25*1000)//30分钟执行一次
    public void getLoginSessionid() {
        JSONObject jsonObj = new JSONObject();
        jsonObj.put("user_name","admin");
        jsonObj.put("user_pwd","admin");
        String json = jsonObj.toJSONString();
        ResponseResult login = senseBoxDbService.login(json);
        System.out.println("session的值是"+login.getData());
        variable= (String)login.getData();
        System.out.println(variable);

    }
}

上面写了一个定时器,定时器中我定义了我获得这个 data 也就是sessionid 我用variable接收了一下,定义成全局的静态变量, 之后在请求中设置一些 就可以使用了;


/**
 * 批量下发请求的工具类
 */
public static String sendPostBeatch(String sURL,Integer lib_id , List <String > multipartFiles ) throws Exception {
  CloseableHttpClient httpClient = HttpClients.createDefault();
  HttpPost uploadFile = new HttpPost(sURL);
  uploadFile.setHeader("sessionid",SenseBoxLoginScheduler.variable);

最后简要的总结一下我今天的这个定义的定时器的作用,由于我自己也需要过一遍,所以就不给提供图像了,俗话说敲一遍之后我就会记的很深刻了,
(1)参数详解:@Scheduled(cron="*/5 * * * * ?")

cron 表达式语法[秒],[分],[时],[日],[月],[周],[年]

允许通配符,秒表示是0-59 或者 -/ 符号 记得这个是秒
中间用空格隔开, 分钟和秒是一样的 0-59 或者 -
/ 小时
和分钟还是一样的,0-23 -*/ 别问我为什么是63, 后面的直接看下面; “ 0 /5 * * * * ?” 就是说如果 秒 分 时 没有值 直接用0 后面没有值的 用通配符表示

1秒是0-59,- * /2分是0-59,- * /3时是0-23,- * /4日是1-31,- * ? / L W5月是1-12 / JAN-DEC,- * /6周是1-7 or SUN-SAT,- * ? / L #7年否1970-2099,- * /
``
其实上面这个注解使用的不是很多  原因是 一般使用定时器我们也就是好比 需要使用 seesionid  或者一些 定时提醒的任务需要用  完全可以使用下面这个参数 就可以了
(2@Scheduled(fixedDelay =5*1000  )延迟   这个注解很简单 只要之哦啊秒毫秒的运算就可以了  这个意思就是 执行一次
5秒后在执行一次 ;
(3)第三个注解的使用
fixedDelayString ="5000“和上边的内阁值是一样的 不同的是 这个支持 占位符的形式  ,好比在 idea的  yml 中配置
一个常量  之后通过这种形式去获取我们需要的session,
time.fixedDelay=5000     之后我们就可以这样定义了 对没错就是@Scheduled(fixedDelayString =${time.fixedDelay}")
是不是很suprised就这几个参数吧,我现在开发时够用了,
一般我们都是够用就可以了,不用深入去研究,不够的时候再去搜一下扩展一点,积跬步,至千里,对吧 各位前辈们;