您的位置:首页 > 编程语言 > Java开发

SpringBoot+JPA 定时器(定时触发某任务)

2020-06-05 06:01 295 查看

这里写的是用定时器触发数据库轮训的任务;

首先在Repo层中自定义了一个按条件查询的语句(这里查询的是电话号码,将符合条件的电话号码从表中查出来形成一个列表。注意:由于没有查全部数据,所以List<>中不能是整个表的名字,应该是List.否则编译时会报无法查出未查询数据的错误

repo层:

@Query(value="SELECT phone_number FROM descioline_info " +
"WHERE (`send_himself_status`=1&&(DATEDIFF(`send_himself_expiry_date`,NOW())<=5))" +
"||(`send_organization_status`= 1&&(DATEDIFF(`send_organization_expiry_date`,NOW())<=5))" +
"||(`send_personnel_status`=1&&(DATEDIFF(`send_personnel_expiry_date`,NOW())<=5))",nativeQuery = true)
List<Object> sendMessageJob2();

在Service层中调用repo层中自定义的这个方法。

public List<Object> sendMessageJob2() {
return desciolineInfoRepo.sendMessageJob();
}

定义定时器的方法,这里设置的是每50秒自动执行一次,便于测试。

@Configuration
@EnableScheduling
public class SelectnumberJob {
@Autowired
private DesciolineInfoService desciolineInfoService;

@Autowired
private SmsCommon smsCommon;
//0 0 12 * * ?   每天中午12点触发
@Scheduled(cron = "0/50 * * * * ?")//每50秒触发一次
private void configureTasks() {
//  System.err.println("执行静态定时任务时间: " + LocalDateTime.now());测试是否每50秒进行重复

// 查询手机号
//实例化查询出来的电话列表
List<Object> phonenums = desciolineInfoService.sendMessageJob2();

if (!CollectionUtils.isEmpty(phonenums)){//如果查出来的电话号码不为空。CollectionUtils是一个工具类,它可以使代码更加简洁和安全。
List<String> ps =  phonenums.stream().map(x -> "+86"+x.toString()).collect(Collectors.toList());
//JAVA8 API添加了一个新的抽象称为流stream。将要处理的元素集合看作一种流
//流在管道中传输,并且可以在管道的节点 上进行处理,如筛选,排序,聚合等
//这里就是将提取出来的电话号码每一个前面加上“+86”然后用collect处理
String[] pa = {};
SimpleResponse res =  smsCommon.sendMsg(ps.toArray(new String[ps.size()]),pa);
//这里smsCommon是发短信的方法

if (res.getCode().equals(200)){//当Integer>128时,使用.equals
SimpleResponse simpleResponse= new SimpleResponse();
simpleResponse.msg = "发送成功";
}else {
SimpleResponse simpleResponse= new SimpleResponse();
simpleResponse.msg = "发送失败";
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: