定时任务需求是springmvc提供的一个常见功能,但是配置特别繁琐,本文将介绍如何配置并且使用定时任务。
1.配置定时任务
需要在spring-mvc的配置文件中加入以下配置。
<task:executorid="executor"pool-size="10"queue-capacity="128"/><task:schedulerid="scheduler"pool-size="10"/><task:annotation-drivenexecutor="executor"scheduler="scheduler"proxy-target-class="true"/>
注意:需要在xml引用上加入以下头信息,否则会报异常。
<!--任务线程池--><!--任务执行器线程数量(一个任务需要并发执行的线程数)-->xmlns:task="http://www.springframework.org/schema/task<!--任务调度器线程数量(根据定时器的个数设置)-->http://www.springframework.org/schema/task<!--启用annotation识别@Scheduled注解-->http://www.springframework.org/schema/task/spring-task-3.0.xsd
在使用时,直接使用@Scheduled注解即可,可以按照下文编写。
@ComponentpublicclassSchedulingConfigN{privatestaticfinalLoggerLOG=LoggerFactory.getLogger(SchedulingConfigN.class);@Scheduled(cron="0/20****?")/从第0秒开始,每隔20秒执行一次从前往后分别是秒分时日月年//如果一个小时执行一次就是00*/1**?//每天的11点执行一次0011**?publicvoidscheduing(){System.out.println("定时任务启动1111");}}
2.从数据库获取定时任务执行频率
上文配置有一个问题,就是如果想更改执行的频率,需要更改代码,然后打包,才能生效。那么是否能在数据库中配置执行频率,通过修改数据库就能够更改呢。下文提供代码供大家参考。
@Configuration@EnableSchedulingpublicclassJobConfigimplementsSchedulingConfigurer{@Autowired@Qualifier("timingTasks")TimingTaskstimingTasks;//获取定时任务的时间service@Bean(name={"timingTasks"})publicTimingTaskstimingTasks(){returnnewTimingTasks();}/***执行定时任务.*/@OverridepublicvoidconfigureTasks(ScheduledTaskRegistrartaskRegistrar){taskRegistrar.addTriggerTask(//1.添加任务内容(Runnable)()->System.out.println("执行定时任务2:"+LocalDateTime.now().toLocalTime()),//2.设置执行周期(Trigger)triggerContext->{//2.1从数据库获取执行周期System.out.println("开始执行");List<SaleProductFileBO>resultBO=timingTasks.selectTimingTasks(Long.valueOf(2));//获取定时任务的时间Stringcron=resultBO.get(0).getFiles();//2.3返回执行周期(Date)returnnewCronTrigger(cron).nextExecutionTime(triggerContext);});}}
如果大家生产环境有该需求,建议了解和使用xxl-job。开源且好评如潮。