Apache-Camel中的Quartz定时任务

需求:在camel的基础上增加两个定时任务,一个需要发邮件,一个只需要简单调用存储过程并拿回数据记录日志即可

package com.hkt.it.ds.dmg.eip.route;import java.util.List;import com.xxx.DmgCamelRouteConfig;
import com.xxx.DmgCamelRouteUriBuilder;
import com.xxx.dao.AccountDao;
import com.xxx.domain.*;
import com.xxx.service.EmailService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.camel.LoggingLevel;
import org.apache.camel.builder.endpoint.EndpointRouteBuilder;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;@Slf4j
@Component
@RequiredArgsConstructor
public class AccountExpirationSchedulerRoute extends EndpointRouteBuilder {// cron 表达式public final static String DAY_END_CRON_EXPRESSION = "0+0+0+*+*+?";private final @Qualifier(EchooCamelRouteConfig.DIRECT_TO_SEND_SUPPORT_EMAIL_VIA_SMTP) EchooCamelRouteUriBuilder sendSupportEmailViaSmtpRoute;public final AccountDao accountDao;private final EmailService emailService;// 常量public final static String NEARING_EXPIRATION_SUBJECT = "Runner nearing expiration notice.";public final static String NEARING_EXPIRATION_CONTENT= "<html><head><meta charset=\"utf-8\"></head><body>Dear Administrator,<br /><br />The password of [%s] is about to expire, please remind him/her to change the password as soon as possible.<br /><br />Best Regards</body></html>";@Overridepublic void configure() {// 任务一:Account password haven't changed = 75 daysfrom("quartz://nearingExpirationScheduler?cron="+ DAY_END_CRON_EXPRESSION).log(LoggingLevel.INFO, "Email notification scheduler for account expiration starting!").enrich().simple("direct://get-nearing-expiration-runner-list") // 路由去 get-nearing-expiration-runner-list .split(body()) // 取回的是一个List,把它拆分开一个个处理.process(exchange -> {NearingExpirationAccount nearingExpirationAccount = exchange.getIn().getBody(NearingExpirationAccount.class);log.info("Send email to notice [{}] admin [{}] that account [{}] is nearing expiration.",nearingExpirationAccount .getCode(),nearingExpirationAccount .getEmailListStr(),nearingExpirationAccount .getUsername());//send emailexchange.getIn().setBody(emailService.generateExpirationNotificationEmail(nearingExpirationAccount .getEmailListStr(), NEARING_EXPIRATION_SUBJECT,String.format(NEARING_EXPIRATION_CONTENT, nearingExpirationAccount .getUsername())));}).to(sendSupportEmailViaSmtpRoute.getUri()); // 路由到后续的发邮件部分from("direct://get-nearing-expiration-runner-list").process(exchange -> {// 从 DB 拿数据List<NearingExpirationAccount> nearingExpirationAccountList= accountDao.getNearingExpirationRunnerList();log.info("Nearing expiration account list: {}", nearingExpirationAccountList);// 塞进body,进行后续的处理exchange.getIn().setBody(nearingExpirationAccountList);});//  任务二:Account password haven't changed = 90 daysfrom("quartz://expiredRunnerScheduler?cron=" + DAY_END_CRON_EXPRESSION).log(LoggingLevel.INFO, "Expired account scanning scheduler starting!").process(exchange -> {List<ExpiredOrSuspendedAccount> expiredAccountList = accountDao.updateAndGetExpiredAccountList();log.info("The status of these expired account {} has been set to 'EXPIRED'", expiredAccountList );});}
}

from("quartz://nearingExpirationScheduler?cron="+ DAY_END_CRON_EXPRESSION)
quartz://表示这是一个quartz定时任务
nearingExpirationScheduler是这个任务的名字
cron=后面跟的是cron定时表示式

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

全面介绍HTML的语法!轻松写出网页

文章目录 heading(标题)paragraph(段落)link(超链接)imagemap(映射)table(表格)list(列表)layout(分块)form(表单)更多输入:datalistautocompleteautofocusmultiplenovalidatepatternplaceholderrequired head(首部)titlebaselinkstylemetascriptnoscript iframe HTML&#xff…

Java SpringBoot 获取 yml properties 自定义配置信息

Java SpringBoot 获取 yml properties 自定义配置信息 application.yml server:port: 9090servlet:context-path: /app第一种方法 HelloController package com.zhong.demo01.controller;import org.springframework.beans.factory.annotation.Value; import org.springfram…

NVM存储设备MTBF介绍

1. 概念 1.1. MTBF MTBF(Mean Time Between Failure)&#xff0c;平均故障间隔时间&#xff0c;也被称为平均无故障时间&#xff0c;是衡量一个产品的可靠性指标&#xff0c;其单位为小时。其定义为&#xff1a;产品在总的使用阶段累计工作时间与故障次数的比值&#xff1a; …

【加密算法】AES对称加密算法简介

目录 前言 工作原理 SubBytes ShiftRows MixColumns AddRoundKey 应用场景 在Java中使用AES 加密和解密数据 注意事项和最佳实践 结论 前言 AES&#xff08;Advanced Encryption Standard&#xff09;是一种对称加密算法&#xff0c;它在密码学中被广泛应用。AES取代…

如何将本地项目上传到github上

将本地项目上传到github上有很多种方法&#xff0c;这里只讲述我认为最简单快捷的一种&#xff0c;先在github中创建一个仓库&#xff0c;接着在本地建文件夹&#xff0c;用命令行将项目推送到本地仓库&#xff0c;然后连接远程仓库&#xff0c;将本地项目推送到远程仓库上。要…

数学建模【相关性模型】

一、相关性模型简介 相关性模型并不是指一个具体的模型&#xff0c;而是一类模型&#xff0c;这一类模型用来判断变量之间是否具有相关性。一般来说&#xff0c;分析两个变量之间是否具有相关性&#xff0c;我们根据数据服从的分布和数据所具有的特点选择使用pearson&#xff…

分布式ID生成方案详解

✨✨ 祝屏幕前的您天天开心 &#xff0c;每天都有好运相伴。我们一起加油&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 目录 引言 一. UUID&#xff08;Universally …

开发者利器: 从 Amazon CodeWhisperer 到 Amazon Q

自 ChatGPT 火爆以来&#xff0c;生成式 AI 助手也是层出不穷&#xff0c;目前自然是以 Microsoft Copilot&#xff08;基于 GPT&#xff09;普及度最高了吧。看着微软风光了这么久&#xff0c;其他云厂商怎么可能会甘愿落后&#xff1f; 最近&#xff0c;来自亚马逊云科技的 …

阿里云国际云解析DNS如何开启/关闭流量分析?

流量分析服务会涉及产生日志费用&#xff0c;所以开通内网DNS解析服务后&#xff0c;默认不会主动开启流量分析&#xff0c;需要您手动开启流量分析。对于未开启流量分析的用户&#xff0c;进入界面会提示您展示的都是模拟数据&#xff0c;您可以点击开启流量分析服务&#xff…

B站项目-基于Pytorch的ResNet垃圾图片分类

基于Pytorch的ResNet垃圾图片分类 项目链接 数据集下载链接 1. 数据集预处理 1.1 画图片的宽高分布散点图 import osimport matplotlib.pyplot as plt import PIL.Image as Imagedef plot_resolution(dataset_root_path):image_size_list []#存放图片尺寸for root, dirs, fi…

实验室储样瓶耐强酸强碱PFA材质试剂瓶适用新材料半导体

PFA&#xff0c;全名可溶性聚四氟乙烯&#xff0c;试剂瓶又叫取样瓶、样品瓶、广口瓶、储样瓶等。主要用于痕量分析、同位素分析等实验室&#xff0c;广泛应用于新兴的半导体、新材料、多晶硅、硅材、微电子等行业。 规格参考&#xff1a;30ml、60ml、100ml、125ml、250ml、30…

使用keil移植freerots简结

1.安装keil 5.0 2.安装 keil device 软件包&#xff1a;具体单片机软件包下载地址&#xff1a; Arm Keil | Deviceshttps://www.keil.arm.com/devices/ &#xff0c;选择自己单片机所属型号.下载后导入即可. 3.新建工程时选择对应device&#xff1a; 选择CMISIS的CORE即可.其…

ABBYY FineReader16文档转换、PDF管理与文档比较功能介绍

ABBYY FineReader 16作为一款OCR和PDF一体化程序&#xff0c;其强大的功能使得文档处理变得简单高效。在众多功能中&#xff0c;文档转换、PDF管理和文档比较这三大功能尤为突出&#xff0c;成为了众多企业和个人用户的首选工具。 ABBYY Finereader 16-安装包下载如下&#xff…

kafka学习笔记三

第二篇 外部系统集成 Flume、Spark、Flink、SpringBoot 这些组件都可以作为kafka的生产者和消费者&#xff0c;在企业中非常常见。 Flume官网&#xff1a;Welcome to Apache Flume — Apache Flume Flink&#xff1a;Apache Flink_百度百科 Spark&#xff1a;Apache Spark…

openEuler2203 LTS环境下docker容器的配置与应用

一、说明 本文配置环境为VMware虚拟机&#xff08;4核CPU&#xff0c;8 GB内存&#xff0c;40GB磁盘&#xff09;&#xff0c;OS为openEuler 22.03 LTS &#xff0c;虚拟机要求能联网。 二、安装docker 1、安装docker软件包 [rootnode1 ~]# dnf -y install docker2、查看do…

高性能API云原生网关 APISIX安装与配置指南

Apache APISIX是Apache软件基金会下的顶级项目&#xff0c;由API7.ai开发并捐赠。它是一个高性能的云原生API网关&#xff0c;具有动态、实时等特点。 APISIX网关可作为所有业务的流量入口&#xff0c;为用户提供了丰富的功能&#xff0c;包括动态路由、动态上游、动态证书、A…

autocrlf和safecrlf

git远程拉取及提交代码&#xff0c;windows和linux平台换行符转换问题&#xff0c;用以下两行命令进行配置&#xff1a; git config --global core.autocrlf false git config --global core.safecrlf true CRLF是windows平台下的换行符&#xff0c;LF是linux平台下的换行符。…

SpringBoot源码解读与原理分析(三十三)SpringBoot整合JDBC(二)声明式事务的生效原理和控制流程

文章目录 前言10.3 声明式事务的生效原理10.3.1 TransactionAutoConfiguration10.3.2 TransactionManagementConfigurationSelector10.3.3 AutoProxyRegistrar10.3.4 InfrastructureAdvisorAutoProxyCreator10.3.5 ProxyTransactionManagementConfiguration10.3.5.1 Transactio…

基于springboot+vue的抗疫物资管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

C 嵌入式系统设计模式 12:去抖动模式

本书的原著为&#xff1a;《Design Patterns for Embedded Systems in C ——An Embedded Software Engineering Toolkit 》&#xff0c;讲解的是嵌入式系统设计模式&#xff0c;是一本不可多得的好书。 本系列描述我对书中内容的理解。本文章描述访问硬件的设计模式之五&…