需求:在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定时表示式