Spring Boot SchedulingConfigurer定时执行任务(配置式反射调用)

目录

1.背景

2.简介

3.代码实现

3.1.主类

3.2.配置类 

3.3.配置示例 


1.背景

定时任务注解@Scheduled(cron="0 0/10 * * * ?")大家都会用,但是一旦需要配置时间,这种方式就不可行了,本文介绍了可以配置的方式。

2.简介

本文采用SchedulingConfigurer从配置中读取定时任务信息,装载到定时任务中。

任务执行时进行SpringBean方式反射加载执行。

3.代码实现

3.1.主类

/*** 定时任务*/
@Configuration
@Slf4j
public class ScheduledTask implements SchedulingConfigurer {@AutowiredScheduledConfig scheduledConfig;/*** 转换首字母小写** @param str* @return*/public static String lowerFirstCapse(String str) {char[] chars = str.toCharArray();chars[0] += 32;return String.valueOf(chars);}@Overridepublic void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {scheduledConfig.getItemList().forEach(scheduledConfigItem -> {Runnable runnable=new Runnable() {@Overridepublic void run() {Class<?> clazz;try {clazz = Class.forName(scheduledConfigItem.getClassName());String className = lowerFirstCapse(clazz.getSimpleName());Object bean = (Object) SpringUtil.getBean(className);Method method = ReflectionUtils.findMethod(bean.getClass(), scheduledConfigItem.getMethod());log.info("任务{}已启动",scheduledConfigItem.getName());ReflectionUtils.invokeMethod(method, bean);log.info("任务{}已结束",scheduledConfigItem.getName());} catch (ClassNotFoundException e) {e.printStackTrace();}}};scheduledTaskRegistrar.addCronTask(runnable,scheduledConfigItem.getCron());log.info("任务{}已加载",scheduledConfigItem.getName());});}
}

3.2.配置类 

@Configuration
@ConfigurationProperties(prefix = "scheduled-config")
@Data
public class ScheduledConfig {private List<ScheduledConfigItem> itemList;
}@Data
public class ScheduledConfigItem {private String name;private String cron;private String className;private String method;
}

3.3.配置示例 

scheduled-config:itemList:- name: searchDataReloadcron: 0 32 14 * * ?className: com.whq.myapp.service.SearchServicemethod: dataReload

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/416752.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“约见”面试官系列之常见面试题之第九十九篇之router和route(建议收藏)

1.router是VueRouter的一个对象&#xff0c;通过Vue.use(VueRouter)和VueRouter构造函数得到一个router的实例对象&#xff0c;这个对象中是一个全局的对象&#xff0c;他包含了所有的路由包含了许多关键的对象和属性。 举例&#xff1a;history对象 $router.push({path:home…

SQLServer数据库,表内存,实例名分析SQL语句

--数据库内存分析 USE master go DECLARE insSize TABLE(dbName sysname,checkTime VARCHAR(19),dbSize VARCHAR(50),logSize VARCHAR(50)) INSERT INTO insSize ( dbName, checkTime, dbSize, logSize ) EXEC sp_msforeachdb select ? dbName,CONVERT(VARCHAR(19),GETDATE(),…

centos nodejs yarn安装及升级

/安装nodejs yum install epel-release yum install nodejs //安装yarn curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo #curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash - sudo yum in…

“约见”面试官系列之常见面试题之第一百篇之响应路由参数的变化(建议收藏)

当使用路由参数时&#xff0c;例如从 /user/aside导航到 /user/foo&#xff0c;原来的组件实例会被复用。因为两个路由都渲染同个组件&#xff0c;比起销毁再创建&#xff0c;复用则更加高效。不过&#xff0c;这也意味着组件的生命周期钩子不会再被调用。 注意: &#xff08…

初学者最常问的几个问题

隔行如隔山&#xff0c;初学编程往往不知道从何入手&#xff0c;非常迷茫&#xff0c;以下几个问题是我经常被问到的&#xff0c;总结出来分享给读者。 1) 多久能学会编程? 这是一个没有答案的问题。每个人投入的时间、学习效率和基础都不一样。如果你每天都拿出大把的时间来学…

centos中nodejs npm环境完全删除

使用n升级失败&#xff0c;npm命令直接报错 yum remove nodejs npm -y cd /usr/local/bin 删除 node 的可执行文件和npm 删除: rm -rf /root/.npm rm -rf /usr/local/n

js封装正则验证

//根据不同的验证内容&#xff0c;返回相应的正则表达式 function returnRegString(regName) { if (regName "email") { return "^([a-zA-Z0-9_\.\-])\(([a-zA-Z0-9\-])\.)([a-zA-Z0-9]{2,4})$"; //邮箱 } else if (regName "tel") { return &…

“约见”面试官系列之常见面试题之第一百零一篇之vue-router传参(建议收藏)

vue-router传递参数分为两大类 编程式的导航 router.push声明式的导航 <router-link> 编程式的导航 router.push 编程式导航传递参数有两种类型&#xff1a;字符串、对象。 字符串 字符串的方式是直接将路由地址以字符串的方式来跳转&#xff0c;这种方式很简单但是不…

mac os域名解析处理 清缓存 映射

清理dns缓存 手动清理dns缓存&#xff0c;Mac OS X系统中我们可以在系统中直接在命令行窗口&#xff08;terminal&#xff09;输入命令lookupd -flushcache或type dscacheutil -flushcache清空刷新dns 解析缓存 修改hosts文件 sudo vi /etc/hosts

“约见”面试官系列之常见面试题之第一百零二篇之vue-router的两种模式(建议收藏)

众所周知&#xff0c;vue-router有两种模式&#xff0c;hash模式和history模式&#xff0c;这里来谈谈两者的区别。 hash模式 hash模式背后的原理是onhashchange事件,可以在window对象上监听这个事件: 上面的代码可以通过改变hash来改变页面字体颜色&#xff0c;虽然没什么用…

Ubuntu热键控制spotify播放和音量调节

安装xbindkeys sudo apt-get install xbindkeys 新建配置文件 xbindkeys -d > ~/.xbindkeysrc 编辑热键 vim ~/.xbindkeysrc 添加以下命令 "dbus-send --print-reply --destorg.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Pla…

python3 venv 虚拟环境使用

目录 1.背景 2.创建虚拟环境 3.目录结构 4.pip安装 5.环境使用 1.背景 很多应用、开源软件都是python写的&#xff0c;各自有各自的软件包和版本依赖&#xff0c;有事可能会有所冲突&#xff0c;为了避免这个冲突&#xff0c;建议采用venv虚拟环境。 本文讲解venv虚拟环…

“约见”面试官系列之常见面试题之第一百零三篇之vue-router实现路由懒加载(建议收藏)

vue异步组件es提案的import()webpack的require,ensure()vue异步组件技术 异步加载 vue-router配置路由 , 使用vue的异步组件技术 , 可以实现按需加载 . 但是,这种情况下一个组件生成一个js文件 /* vue异步组件技术 */ {path: /home,name: home,component: resolve > requir…

olive videoeditor开源跨平台视频编辑器

目录 简介 官网 使用 简介 olive是开源的视频编辑软件&#xff0c;目前下载版本为Alpha版&#xff0c;但已基本可用。 本文讲解添加图片、特效及文字&#xff0c;最后导出视频的简单过程。 官网 Olive - Professional Open-Source Video Editor 下载地址 Olive - Profes…

jQuery自定义动画

<!DOCTYPE html><html lang"en"><head> <meta charset"UTF-8"> <title>jQuery自定义动画</title> <script src"https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script> …

CentOS7 Ambari2.7.5编译

目录 1.前言 2.编译环境安装 3.下载源码编译 4.大包提前下载 5.报错处理 5.1.报错 5.2.报错 5.3.报错 5.4.报错 5.5.报错 5.6.报错 5.7.报错 6.编译成功 7.官方说明 1.前言 本文讲解了在纯净CentOS7环境下&#xff0c;编译Ambari2.7.5所需进行的一系列操作及异常…

Centos7.5 Ambari2.7.4部署

目录 1.简介 2.环境准备 3.SSH 免密码登录 4.服务环境 5.本地源搭建 6.安装 7.启动 8.Web页面部署服务 1.简介 本文介绍了Ambari2.7.4在CentOS7.5中使用本地镜像方式进行加速部署。 Ambari Apache Ambari是一种基于Web的工具&#xff0c;支持Apache Hadoop集群的供应…

“约见”面试官系列之常见面试题之第一百零四篇之vue优点(建议收藏)

vue的优点&#xff1a; 1、轻量级框架 只关注视图层,是一个构建数据的视图集合,大小只有几十kb Vue.js通过简洁的API提供高效的数据绑定和灵活的组件系统 2、简单易学 国人开发,中文文档,不存在语言障碍,易于理解和学习 3、双向数据绑定 也就是所谓的响应式数据绑定。这…

打开.tdms文件

http://www.ni.com/tutorial/12049/en/ 转载于:https://www.cnblogs.com/lovexz/p/6844793.html

“约见”面试官系列之常见面试题之第一百零五篇之v-if与v-show(建议收藏)

相同点&#xff1a;v-if与v-show都可以动态控制dom元素显示隐藏 不同点&#xff1a;v-if显示隐藏是将dom元素整个添加或删除&#xff0c;而v-show隐藏则是为该元素添加css--display:none&#xff0c;dom元素还在。 都修改为false后&#xff0c;第一个div是直接被移除掉了 需要…