作者:落渊绝夜 | 来源:互联网 | 2023-09-01 18:32
定时任务需求是springmvc提供的一个常见功能,但是配置特别繁琐,本文将介绍如何配置并且使用定时任务。
1.配置定时任务
需要在spring-mvc的配置文件中加入以下配置。
<task:executor id&#61;"executor" pool-size&#61;"10" queue-capacity&#61;"128" /><task:scheduler id&#61;"scheduler" pool-size&#61;"10" /><task:annotation-driven executor&#61;"executor"scheduler&#61;"scheduler" proxy-target-class&#61;"true" />
注意&#xff1a;需要在xml引用上加入以下头信息&#xff0c;否则会报异常。
<!-- 任务线程池 -->
<!-- 任务执行器线程数量&#xff08;一个任务需要并发执行的线程数&#xff09; -->
xmlns:task&#61;"http://www.springframework.org/schema/task
<!-- 任务调度器线程数量&#xff08;根据定时器的个数设置&#xff09; -->
http://www.springframework.org/schema/task
<!-- 启用annotation 识别&#64;Scheduled注解-->
http://www.springframework.org/schema/task/spring-task-3.0.xsd
在使用时&#xff0c;直接使用&#64;Scheduled注解即可&#xff0c;可以按照下文编写。
&#64;Component
public class SchedulingConfigN {
private static final Logger LOG &#61; LoggerFactory.getLogger(SchedulingConfigN.class);&#64;Scheduled(cron &#61; "0/20 * * * * ?") /从第0秒开始&#xff0c;每隔20秒执行一次 从前往后分别是 秒 分 时 日 月 年public void scheduing() {System.out.println("定时任务启动1111"); }
}
2.从数据库获取定时任务执行频率
上文配置有一个问题&#xff0c;就是如果想更改执行的频率&#xff0c;需要更改代码&#xff0c;然后打包&#xff0c;才能生效。那么是否能在数据库中配置执行频率&#xff0c;通过修改数据库就能够更改呢。下文提供代码供大家参考。
&#64;Configuration
&#64;EnableScheduling
public class JobConfig implements SchedulingConfigurer {&#64;Autowired&#64;Qualifier("timingTasks")TimingTasks timingTasks;&#64;Bean(name&#61;{"timingTasks"})public TimingTasks timingTasks() {return new TimingTasks();}&#64;Overridepublic void configureTasks(ScheduledTaskRegistrar taskRegistrar) {taskRegistrar.addTriggerTask(() -> System.out.println("执行定时任务2: " &#43; LocalDateTime.now().toLocalTime()),triggerContext -> {System.out.println("开始执行");List<SaleProductFileBO> resultBO &#61; timingTasks.selectTimingTasks(Long.valueOf(2));String cron &#61; resultBO.get(0).getFiles();return new CronTrigger(cron).nextExecutionTime(triggerContext);});}}
如果大家生产环境有该需求&#xff0c;建议了解和使用xxl-job。开源且好评如潮。