最近项目中有一个生活提醒功能,后台实现思路
创建提醒表 添加修改提醒时同步给quartz,定时任务执行极光推送任务
使用技术
- quartz
- 极光推送
注意 过期时间的处理
项目启动的时候自己提醒表与quartz表需要同步
java 转cron表达式
- 自定义时间 格式 yyyy-MM-dd HH:mm (转换成) yyyy-MM-dd HH:mm:ss
- 每天 HH:mm
- 周一到周日 HH:mm
最后开启定时任务,执行极光推送达到提醒效果
private void initJob(UserRemindEntity userRemind) {
if (userRemind.getRemindCycle().equals("自定义")) {
String data = DateUtil.format(userRemind.getRemindDate(), "yyyy-MM-dd") + " " + userRemind.getRemindTime() + ":00";
DateTime parse = DateUtil.parse(data, "yyyy-MM-dd HH:mm:ss");
if (new Date().getTime() > parse.getTime()) {
return null;
}
}
String cron = null;
String[] split = userRemind.getRemindTime().split(":");
Integer h = Integer.parseInt(split[0]);
Integer m = Integer.parseInt(split[1]);
switch (userRemind.getRemindCycle()) {
case "每天":
cron = String.format("0 %s %s * * ?", m , h);
break;
case "周一":
cron = String.format("0 %s %s ? * MON", m , h);
break;
case "周二":
cron = String.format("0 %s %s ? * TUE", m , h);
break;
case "周三":
cron = String.format("0 %s %s ? * WED", m , h);
break;
case "周四":
cron = String.format("0 %s %s ? * THU", m , h);
break;
case "周五":
cron = String.format("0 %s %s ? * FRI", m , h);
break;
case "周六":
cron = String.format("0 %s %s ? * SAT", m , h);
break;
case "周日":
cron = String.format("0 %s %s ? * SUN", m , h);
break;
case "自定义":
String data = DateUtil.format(userRemind.getRemindDate(), "yyyy-MM-dd") + " " + userRemind.getRemindTime() + ":00";
cron = formatDateByPattern(DateUtil.parse(data));
break;
default:
cron = String.format("0 %s %s * * ?", m , h);
}
// cron
// 同步到quartz
}