已解决 使用quartzScheduler定时发消息问题
-
代码如上,请问为啥这样使用定时消息,始终不执行呢?我没咋学过kotlin,这个代码是仿照插件区超级课程表写的
-
用自己会的语言写呗
-
经典一行一句
println()
debug法你值得拥有 -
用 Java 写呗, 可以混用 Kotlin,
PluginData
用 Kotlin, Java 也可以调用到 -
那个,传入 job 数据不是这么传的,应该用
JobBuilder.newJob(xxx).usingData("key", value).build()
传入数据。
在 job 里:
context.jobDataMap.getXXX("key")
读取数据。话说既然你仿照我的超级课表插件写,为啥不看清楚再写(x
-
顺便说一下,JobBuilder.newJob(clazz),这个 clazz 是一个 Class<? extends Job>,看你图里写的是实例化了一个SendRandMsg再取它的 class。
这完全没必要,因为:- 这样并不能将数据传入 job 里(上一个回复)。
- 实例化工作是 quartz 内部的操作。
-
其实你用
java.lang.Timer
都是完全没有问题的,每秒判断一次当前时间(这是我的做法,效率可能比较低) -
@him188 感谢大哥的代码。。已经写上了
-
@mrxiaom 可以试试优先队列组合一下sleep?
-
一个简单的实现,目标是一分钟执行一次你的业务代码。
首先,在main.kt里,数据库初始化完毕、机器人启动(login)以后,joinAll之前,加入以下代码
val task = RobotTask() // RobotTask是自己写的
Timer().schedule(task,Date(),60000) // 从运行main'开始及之后的每60s执行一次上一行的task
// 上面RobotTask 的实现,它的业务代码是打印执行任务时的时间。
class RobotTask : TimerTask() {
override fun run() {
runBlocking {
try {
val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")
val date = Date()
val str = sdf.format(date)
println(str)
}catch (e:Exception) {
e.printStackTrace()
}
}
}