2
ilovey482i 2023-04-27 14:46:12 +08:00
Quartz
|
3
hhjswf 2023-04-27 14:48:03 +08:00 1
这种事情手机定个闹钟不是更简单?
|
4
lufeng666 OP @Kontinue 每天都遍历一遍所有任务,这个方法很笨,因为大多数任务并不需要执行。数据量上来后,这个方法也特别耗性能。corn 表达式的生成与解析有没有啥好的三方库推荐的?
|
5
grance 2023-04-27 14:49:58 +08:00 2
xxl
|
6
lission 2023-04-27 14:52:14 +08:00
同 2 楼 Quartz
|
7
hidemyself 2023-04-27 14:53:15 +08:00
一个定时任务就行了
遍历每个任务看下有没有到下次执行时间,到了就执行,没到就跳过 |
8
Bingchunmoli 2023-04-27 14:56:32 +08:00 via Android
同问,如果做一个用户自定义时间的定时任务,怎么轻量一点
|
9
yyfbbb 2023-04-27 14:56:38 +08:00
用 github actions 执行规则,设置每周五定时执行就可以
|
10
doyel 2023-04-27 15:03:25 +08:00
写个 sendmail 用 OS 的 cron 调用,一个循环日程就能完成的事情,还要跑个应用吗。。。
|
11
linauror 2023-04-27 15:03:34 +08:00
感觉日历中的日程基本就可以满足你的需求(小米),可以重复每天,或者周,月,年
|
12
crazyweeds 2023-04-27 15:04:39 +08:00
其实自己写一个也很快,Timer 就能实现。
轻量开源就是 Quartz ,但是也挺烦的其实。 |
13
fengleiyidao 2023-04-27 15:08:13 +08:00
Quartz +1
|
14
SmartTom 2023-04-27 15:16:55 +08:00
用分布式的 xxjob 吧
|
15
goodidea1 2023-04-27 15:24:19 +08:00
chatgpt 会给你答案
|
16
mmdsun 2023-04-27 15:25:11 +08:00 1
推荐 powerjob
这个作者也在 v 站 |
17
totoro52 2023-04-27 15:27:54 +08:00
Quartz 还要自己写 有点麻烦, 直接上 xxl-job 吧 然后写一个发送邮件就行了 我记得里面自带, 你一句代码都不用写
|
18
wqhui 2023-04-27 15:32:12 +08:00
这么简单的操作只想 crontab 懒得写应用,或者你说个复杂点的场景?
|
19
RightHand 2023-04-27 15:36:51 +08:00 via Android
win 计划任务调用 jar ,Linux 就 cron 呗
|
20
SilentRhythm 2023-04-27 15:44:38 +08:00
延时队列是否可行,创建和触发时判断下次通知的时间,不过不知道 op 数据量有多大
|
21
Bingchunmoli 2023-04-27 15:52:01 +08:00 via Android
@doyel 是想做个订阅地区天气有雨就会通知带伞的功能,如果用户可以自己输入订阅时间就有点难做,循环感觉不优雅
|
23
issakchill 2023-04-27 16:10:23 +08:00
@Scheduled 每天查一次 不会多耗性能的
|
24
doyel 2023-04-27 16:13:32 +08:00
@Bingchunmoli 那就从拉取天气接口后根据根据结果给用户推吧,前提都是有监听能让你拉起提醒来,要看具体平台和场景了。
|
25
xiongge 2023-04-27 16:18:58 +08:00
你可以考虑使用 Quartz Scheduler 这个开源的 Java 库来实现你的需求。它是一个功能强大的任务调度框架,支持多种任务周期(每天、每周、每月、每年等),可以非常方便地设置任务的触发时间和频率,并且支持任务的持久化存储。
在你的应用中引入 Quartz Scheduler 库后,你可以通过编写一个 Job 类来定义你的任务逻辑,然后通过创建一个 Trigger 对象来设置任务的触发时间和频率。你还可以将任务的配置信息存储到数据库中,并且在应用启动时从数据库中读取配置信息来动态创建任务。 以下是一个使用 Quartz Scheduler 实现定时发送邮件的示例代码: java Copy code // 定义一个 Job 类来发送邮件 public class SendEmailJob implements Job { public void execute(JobExecutionContext context) throws JobExecutionException { // 在这里编写发送邮件的逻辑 } } // 创建一个 Trigger 对象来设置任务的触发时间和频率 Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("sendEmailTrigger", "email") .withSchedule(CronScheduleBuilder.cronSchedule("0 0 17 ? * FRI")) // 每周五下午 5 点触发 .build(); // 创建一个 SchedulerFactory 对象并启动 Scheduler SchedulerFactory sf = new StdSchedulerFactory(); Scheduler scheduler = sf.getScheduler(); scheduler.start(); // 注册 Job 和 Trigger JobDetail job = JobBuilder.newJob(SendEmailJob.class) .withIdentity("sendEmailJob", "email") .build(); scheduler.scheduleJob(job, trigger); 在上面的代码中,我们定义了一个 SendEmailJob 类来发送邮件,然后创建了一个 Trigger 对象来设置任务的触发时间和频率,最后将 Job 和 Trigger 注册到 Scheduler 中。在 Scheduler 启动后,当触发时间到达时,Quartz Scheduler 就会自动执行 SendEmailJob 中定义的发送邮件逻辑。 希望这个示例能够帮助你实现你的需求。 |
26
Bingchunmoli 2023-04-27 16:21:15 +08:00 via Android
@doyel 做的是定时任务查询,而不是监听的
|
27
wetalk 2023-04-27 16:23:02 +08:00
简单点的用 xxl-job ,不嫌麻烦手撸时间轮
|
28
lizhian 2023-04-27 16:24:37 +08:00
手机助手不是更好吗
|
29
CEBBCAT 2023-04-27 16:59:05 +08:00
系统日历不就可以吗?几乎所有的系统都带有日历功能,日历还可以云同步。我感觉可能是文化的差异,国内都忽略了日历这种软件
|
30
chirsgod 2023-04-27 16:59:55 +08:00
PowerJob 、XXL-JOB 、Quartz 这些都可以的啊,你这个需求我感觉都用不到这种东西就能实现
|
31
aino 2023-04-27 17:09:34 +08:00
Cron 表达式是一种用于指定定时任务执行时间的语法格式。它由 6 个字段组成,分别表示秒、分、时、日、月、周几。每个字段可以是一个数值、一组数值、一个范围、一个通配符或一些组合。
Cron 表达式的格式为:秒 分 时 日 月 周几 下面是每个字段可以包含的值: 秒:0~59 分:0~59 时:0~23 日:1~31 月:1~12 周几:0~6 ( 0 表示周日) 除了上述的数值外,还可以使用通配符*表示任意值,使用逗号,表示多个值,使用连字符-表示一个范围,使用斜杠 /表示间隔时间。 例如,下面的 Cron 表达式表示每天的上午 10 点执行一次任务: 0 0 10 * * ? 又如,下面的 Cron 表达式表示每周五晚上 10 点到 11 点之间每隔 5 分钟执行一次任务: 0 */5 22-23 ? * FRI |
32
PVXLL 2023-04-27 17:18:04 +08:00
这种需求还需要( Mysql 数据库?,是不是还得考虑分布式、缓存、配置中心、服务发现、kubernetes ?
|
33
NGXDLK 2023-04-27 17:20:33 +08:00
1 、java 里面 @Scheduled 注解应该就能满足
2 、不怕麻烦,搞 cron 定时任务,到点调用 java 发送邮件 |
35
theOneMe 2023-04-27 17:28:09 +08:00
mac 里的提醒事项就行
|
36
uasier 2023-04-27 17:31:37 +08:00
非 java ,青龙面板,用着很舒服
|
37
burymme11 2023-04-27 17:40:33 +08:00
@lufeng666 我大致理解你的需求了,是不是有很多个通知要推送,每个通知的调度触发点还不一样(有每周,有每月。。)?
如果是这样,个人不推荐 xxl-job 或者 Quartz 等定时调度框架,因为如果后面数据量起来了,会构建越来越多的 job/task ,指标不治本。个人推荐走延时消息,比如 A 要每天 10 点,第一次你监听处理后,再往 topic 里丢,等第二天继续,类似,mq 也会做持久化,消息一般不会丢,读写性能肯定比 db 强 |
38
zhaokun 2023-04-27 17:44:09 +08:00
iPhone 提醒 app 就可以实现
|
39
nothingistrue 2023-04-27 17:45:57 +08:00
就是个简单的按 cron 表达式发邮件,就别折腾 Java 了,写个不到 100 行的 Shell 扔给 cronb 就行了。用 Java 其实也很简单,Spring 的 @Scheduled 就够了,连 Quartz 都用不上。除非你是往现有应用里面加这个定时功能,否则不要干这种拖裤子放屁的事,没有 Linux 的话 Window 的定时计划加 bat 脚本,也能支持。
|
40
wxw752 2023-04-27 17:51:40 +08:00
|
41
sadfQED2 2023-04-27 17:59:44 +08:00 via Android
while(True){
sleep(1000) if(time==XXX){发邮件} } |
42
direction 2023-04-27 18:33:38 +08:00
xxl-job
|
43
oneisall8955 2023-04-27 18:51:14 +08:00 via Android
腾讯轻联,原腾讯 hiflow ,2023 年 9 月 22 日前升级个版每月 3000 个任务,免费版 1000 个任务。感觉还行
|
44
haitaoli 2023-04-27 19:50:22 +08:00
|
45
zhady009 2023-04-27 21:33:07 +08:00
如果就如你描述的那样根本没必要引用什么库
如果有更复杂的要求和场景才可能需要 |
47
lucaslee 2023-04-27 22:20:24 +08:00
如果你想练手写代码,那二楼已经有答案了。如果就是为了完成你的任务,那么找个现成的手机 app 吧,按照你的描述,todo 类的就足够用了,我认为是成本最低的。
|
48
carytseng 2023-04-27 22:35:28 +08:00
我司的钉钉每天下班前会提醒写周报
|
49
009694 2023-04-28 00:16:47 +08:00 via iPhone
crontab+python 1 分钟写完的需求 愣是被你描述成需要先评审再立项的大项目了
|
50
Ericcccccccc 2023-04-28 00:46:22 +08:00
定时任务本质就是轮训, 你想的方法是正确的
而实际上实现一个定时任务系统, 可以配置各种任务就是用数据库实现的, 先看哪些任务要执行, 然后写进数据库里, 然后轮训, 到了要执行的时候就拿出来执行 |
51
tedzhou1221 2023-04-28 09:33:29 +08:00
“每天遍历一遍看是否需要触发” 也没多笨。主要是简单。
我有个想法。(只是想法) 参考多级时间轮的实现方式。或 Rocket MQ 的延时列队 级别 年级别、月级别、天级别。年级别,一年只会遍历一次,月级别一个月遍历一次。 反正就是复杂设计了。如果没多少数据里,每天全遍历也不会有什么问题吧。 |
52
hongchends1 2023-04-28 09:59:03 +08:00
你可以搞个 iOS 上的自动化 每周五触发
|
53
miaotaizi 2023-04-28 10:06:05 +08:00
定时任务去读取配置的提醒(将来要发生的), 往延迟队列里面推 是不是就解决了
|
54
fifa899 2023-04-28 11:21:57 +08:00
日级别的设置个每日任务.每天晚上遍历任务表.发送每日任务延时消息到 MQ 延迟队列.
我们线上几百个用户就是这么搞的.不可能做几百个定时线程挂在服务器里 |
55
MonkeyJon 2023-04-28 13:43:05 +08:00
xxlJob 方便简洁
|
56
howfree 2023-04-28 16:22:15 +08:00
xxljob
|
57
season8 2023-04-28 17:28:47 +08:00
最简单是闹钟、日程提醒,或者相关微信公众号提醒
都 cron 了,直接一个 shell 脚本呗 都就 java 了,用 spring 的定时任务也行啊,多个任务怕延迟可以搞个线程池 好多任务需要管理,用 xxl 这种小事,没必要复杂化,整一堆够你写多少个周报了 |
58
easyalarm 2023-05-06 19:38:06 +08:00 via Android
去
https://drive.google.com/drive/mobile/folders/1M5YBI9zBE6-dV6o0sQo-8wNAgq-hPcYV 下载一个 apk 然后把这两行贴进去就行了 提醒:再不写写周班就卷铺盖回家 每周:5 时间:15:00 |