热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

springmvc的定时任务

定时任务需求是springmvc提供的一个常见功能,但是配置特别繁琐,本文将介绍如何配置并且使用定时任务。1.配置定时任务需要在spring-mvc

在这里插入图片描述
定时任务需求是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秒执行一次 从前往后分别是 秒 分 时 日 月 年// 如果一个小时执行一次就是 0 0 */1 * * ?// 每天的11点执行一次 0 0 11 * * ?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;//获取定时任务的时间service&#64;Bean(name&#61;{"timingTasks"})public TimingTasks timingTasks() {return new TimingTasks();}/*** 执行定时任务.*/&#64;Overridepublic void configureTasks(ScheduledTaskRegistrar taskRegistrar) {taskRegistrar.addTriggerTask(// 1.添加任务内容(Runnable)() -> System.out.println("执行定时任务2: " &#43; LocalDateTime.now().toLocalTime()),// 2.设置执行周期(Trigger)triggerContext -> {// 2.1 从数据库获取执行周期System.out.println("开始执行");List<SaleProductFileBO> resultBO &#61; timingTasks.selectTimingTasks(Long.valueOf(2));//获取定时任务的时间String cron &#61; resultBO.get(0).getFiles();// 2.3 返回执行周期(Date)return new CronTrigger(cron).nextExecutionTime(triggerContext);});}}

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



推荐阅读
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 第七课主要内容:多进程多线程FIFO,LIFO,优先队列线程局部变量进程与线程的选择线程池异步IO概念及twisted案例股票数据抓取 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • 解决IDEA配置xml文件头报错的方法
    本文介绍了解决IDEA配置xml文件头报错的方法,包括了具体的解决方案和步骤。通过本文的指导,读者可以轻松解决这个问题并正常使用IDEA进行开发工作。 ... [详细]
  • 本文提供了关于数据库设计的建议和注意事项,包括字段类型选择、命名规则、日期的加入、索引的使用、主键的选择、NULL处理、网络带宽消耗的减少、事务粒度的控制等方面的建议。同时还介绍了使用Window Functions进行数据处理的方法。通过遵循这些建议,可以提高数据库的性能和可维护性。 ... [详细]
author-avatar
落渊绝夜
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有