背景:

Apscheduler框架中,每个任务的配置信息需要写在代码中。

scheduler.add_job(func=func, id=job_id, trigger=trigger, second=interval, jitter=jitter)

以这段添加任务的代码举例:

1、每一个任务的配置参数需要写在代码中,修改很麻烦,而且容易写错,并且每次需要提交代码,操作很重。

2、func字段是class module,无法通过常规手段从数据库或配置中心读取该信息。

apscheduler自身的数据库引擎也做过尝试,感觉并不能满足方便配置管理的目的。

解决什么问题:

代码中不需要配置任何一个任务的参数,任务参数实现100%数据库化,从而实现任务配置页面化。

环境:python3.7 + apscheduler3.6.3

效果:

解决思路:

  1. 解决func为module类型的问题,将该信息转换为可配置的变量,方便配置在数据库中。
    这个方法参考了以下文章,通过模块、类、方法的动态调用来解决
    https://www.cnblogs.com/bluefrog/archive/2012/05/11/2496439.html
  2. aps自带的cron调度方式,时间格式的key(例如minute、hour)不是变量,同样无法直接从数据库读取。
    这里我从APS源码(crontrigger中的from_crontab)中获得了灵感,所以对原有的cron调度方式做了改变,实现了类似crontab的配置方法,从而完全配置化。

核心代码如下:

注:因为有爬文章且不注明的人存在,本代码中有两处明显bug,无法直接使用,请大家注意,仅提供思路。

def add_all_job_to_aps():import restatus = False# 查询db中所有任务的配置信息task_config_list = get_all_job_config(table_name)if not task_config_list:return statusfor task in task_config_list:task_id = task['id']try:job_id = task['job_id']module_path = task['module_path']class_name = task['class_name']function_name = task['function_name']trigger = task['trigger']trigger_args = task['trigger_args']jitter = task['jitter']run_at_startup = int(task['run_at_startup'])enable = int(task['enable'])except Exception as e:print_func('Error id: %s, job_id: %s, config parse error, reason: %s!' % (task_id, job_id, e))continueelse:if enable != 1:print('job_id: %s, 配置不是启用状态,不参与调度!' % job_id)continueimport importlibtry:obj = importlib.import_module(module_path)  # import moduleexcept Exception as e:print_func('Error id: %s, job_id: %s, import error, reason: %s' % (task_id, job_id, e))continueif trigger == 'crontab':try:if run_at_startup == 1:scheduler.add_job(func=func, id=job_id, trigger='cron', jitter=jitter, args=[task_id], next_run_time=now(),minute=values[0], hour=values[1], day=values[2], month=values[3],day_of_week=values[4])else:scheduler.add_job(func=func, id=job_id, trigger='cron', jitter=jitter, args=[task_id],minute=values[0], hour=values[1], day=values[2], month=values[3],day_of_week=values[4])except Exception as e:print_func('Error job_id: %s, trigger_args error: %s!' % (job_id, e))else:print('job_id: %s only support trigger: cron/crontab' % job_id)return True

apscheduler任务配置信息,实现100%数据库化相关推荐

  1. 如何根据vin码查询_vin查配置 车辆VIN码查询车辆基本配置信息 知道车辆vin码怎么查配置...

    使用车架号来查询车辆信息.可以通过车架号查询车辆的车牌号码.   提供17位VIN码(车架号)在线查询服务,可以查询汽车的厂家名称.品牌.车系.车型.车身形式.年款.排量.变速箱描述.变速器类型.发动 ...

  2. Springboot 从数据库读取数据库配置信息,动态切换多数据源 最详细实战教程

    以前写过一篇教程,Springboot AOP方式切换多数据源(主从两库类似情况使用最佳): https://blog.csdn.net/qq_35387940/article/details/100 ...

  3. MySQL数据库配置信息查看和修改

    文章目录 摘要 查看 查看数据基本信息 查询sql_mode 查看在配置文件中定义的变量 查看MySQL的服务当前运行时的变量 常用查询 是否大小写敏感 如何修改? 查看MySQL默认认证方式 修改M ...

  4. 织梦DEDECMS数据库配置文件在哪?如何修改配置信息

    织梦DEDECMS数据库配置文件在:/data/common.inc.php $cfg_dbhost = 'localhost'; 数据库地址,一般不需要修改 $cfg_dbname = 'dedec ...

  5. 使用 plsql 时的配置信息(连远程数据库服务器 到 在本机安装 oracle )

    一.本地没有安装oracle时,只有 instantclient_12_1 客户端 和 plsql  或者 navicate 时,配置信息默认在: D:\QzyInstalled\instantcli ...

  6. 高德深度信息接入的平台化演进

    简介: 本文介绍了高德地图中POI深度信息接入在平台化过程中的一些思考和实践,从最开始的单体应用,随着业务发展面临挑战,从业务角度提出解决问题的思路和方案,进而转化成技术设计并落地实现的过程. 导读 ...

  7. 使用Apache Commons Configuration读取配置信息

    2019独角兽企业重金招聘Python工程师标准>>> 在项目中使用一些比较新的库总会给你带来很多快乐,在这篇文章中,我将会给你介绍一个在Java中读取配置文件的框架--Apache ...

  8. Tomcat下conf下server.xml的文件配置信息

    Tomcat下conf下server.xml的文件配置信息,基本上不用做任何修改就可以使用,修改的地方就是host区域的一些配置,此文件设置端口为80. 注意:Tomcat配置文件中(即server. ...

  9. ASP.NET Core的配置(1):读取配置信息

    提到"配置"二字,我想绝大部分.NET开发人员脑海中会立马浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化 ...

  10. activemq mysql 配置详解_activeMQ数据库配置

    ActiveMQ很好的支持了消息的持久性(Persistence).消息持久性对于可靠消息传递来说应该是一种比较好的方法,有了消息持久化, 即使发送者和接受者不是同时在线或者消息中心在发送者发送消息后 ...

最新文章

  1. 一文读懂文本处理中的对抗训练
  2. Linux 监控命令之 netstat
  3. 9张图总结一下阿里云的2019
  4. python 参数收集_Python3基础 函数 收集参数(tuple)+普通参数 的示例
  5. 第一:Python安装需要的第三方库时,命令行输入pip提示不是内部或外部命令
  6. 《一本书读懂中国税》- 笔记
  7. Internet Explorer 无法打开搜索页
  8. OpenCV运动目标检测背景差法和帧差法的理解
  9. 28388D上电时从BOOT跳转到main过程分析
  10. 学习笔记:《数字媒体技术概论》-5/10 计算机图形与动画技术-中国大学慕课公开课
  11. 计算机毕业设计ssm鹊巢大连分公司分销商管理系统51g9m系统+程序+源码+lw+远程部署
  12. 第7章,广义相加模型(GAMs)
  13. 紫光集团或入股武汉新芯 赵伟国将任董事长
  14. 数据分析软件Excel,Origin, Matlab,Mathmatica和Maple
  15. 尚硅谷nginx学习
  16. 拓扑容差如何修改_如何在CAD中通过设置容差参数对多段线进行自动修复重构
  17. 快应用的用法和常见问题解答(上)
  18. Excel 如何让一列中的很多数 同时加上一个数
  19. VUE2版本引入Element UI
  20. ktv服务器系统怎样加歌,明光市ktv点歌系统如何加歌

热门文章

  1. 施努卡:机器视觉尺寸检测(机器视觉表面缺陷检测)
  2. 从百度“童年英雄的AI幻想”互动展说起,看AI如何赋能艺术?
  3. 关于ubuntu上,usb设备编号
  4. Airflow实战--获取REST参数并通过Xcom传递给Bash算子
  5. php mysql 更新多条数据_php update 多条数据库
  6. widows升级nodejs版本
  7. linux上删除rime方案_Linux中Rime输入法安装使用小结
  8. SCOI 2016 bzoj 4567~4572 题解
  9. DS树--找出直系亲属
  10. IT群侠传第二回一专多能