写点什么

springmvc 的定时任务

用户头像
小黄鸡1992
关注
发布于: 2021 年 11 月 05 日
springmvc的定时任务

1.配置定时任务

需要在 spring-mvc 的配置文件中加入以下配置。


    <task:executor id="executor" pool-size="10" queue-capacity="128" />       <task:scheduler id="scheduler" pool-size="10" />       <task:annotation-driven executor="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 注解即可,可以按照下文编写。


@Componentpublic class SchedulingConfigN {private static final Logger LOG = LoggerFactory.getLogger(SchedulingConfigN.class);  @Scheduled(cron = "0/20 * * * * ?")  /从第0秒开始,每隔20秒执行一次 从前往后分别是 秒 分 时 日 月 年                                                              // 如果一个小时执行一次就是 0 0 */1 * * ?                                                              // 每天的11点执行一次 0 0 11 * * ?  public void scheduing() {    System.out.println("定时任务启动1111");      }}
复制代码

2.从数据库获取定时任务执行频率

上文配置有一个问题,就是如果想更改执行的频率,需要更改代码,然后打包,才能生效。那么是否能在数据库中配置执行频率,通过修改数据库就能够更改呢。下文提供代码供大家参考。


@Configuration@EnableSchedulingpublic class JobConfig implements SchedulingConfigurer {
@Autowired @Qualifier("timingTasks") TimingTasks timingTasks;
//获取定时任务的时间service @Bean(name={"timingTasks"}) public TimingTasks timingTasks() { return new TimingTasks(); }
/** * 执行定时任务. */ @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { 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)); //获取定时任务的时间 String cron = resultBO.get(0).getFiles(); // 2.3 返回执行周期(Date) return new CronTrigger(cron).nextExecutionTime(triggerContext); }); }
}
复制代码


如果大家生产环境有该需求,建议了解和使用 xxl-job。开源且好评如潮。

用户头像

小黄鸡1992

关注

小黄鸡加油 2021.07.13 加入

一位技术落地与应用的博主,带你从入门,了解和使用各项顶流开源项目。

评论

发布
暂无评论
springmvc的定时任务