已通过实际测试有效:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;
@Configuration
@EnableScheduling // 或者在启动类中加这个注解,这样无需每个任务类都加
public class MQScheduler implements SchedulingConfigurer {
private static final Logger logger = LoggerFactory.getLogger(MQScheduler.class);
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.addTriggerTask(
() -> doMyWork(), // 想要做什么
triggerContext -> {
String cron = "0 0/5 * * * ?"; // 从数据库读取 Cron 表达式
return new CronTrigger(cron).nextExecutionTime(triggerContext);
});
}
private void doMyWork() {
// ...
logger.info("读取到的MQ消息:{}", "啊,大海啊,你全是水");
}
}