小付博客

无话可说...

您现在的位置是:首页>技术分享>spring-quartz 定时发送任务

spring-quartz 定时发送任务

发布时间:2017-12-08 编辑:小付 浏览(773) 评论(0)

    spring-quartz.xml

    <?xml version="1.0" encoding="UTF-8"?>
    
    <beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:task="http://www.springframework.org/schema/task"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
    http://www.springframework.org/schema/tx 
    http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
    http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
    http://www.springframework.org/schema/task  
    http://www.springframework.org/schema/task/spring-task-3.1.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-4.0.xsd
    ">
    
    <!-- 调度触发器
    "0 0 12 * * ?" 每天中午12点触发  
    "0 15 10 ? * *" 每天上午10:15触发  
    "0 15 10 * * ?" 每天上午10:15触发  
    "0 15 10 * * ? *" 每天上午10:15触发  
    "0 15 10 * * ? 2005" 2005年的每天上午10:15触发  
    "0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发  
    "0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发  
    "0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发  
    "0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发  
    "0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发  
    "0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发  
    "0 15 10 15 * ?" 每月15日上午10:15触发  
    "0 15 10 L * ?" 每月最后一日的上午10:15触发  
    "0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发  
    "0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发  
    "0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发  
     -->
    <!--   FORP.SPRING_CONTEXT.getBean(AdomainService.class); -->
    <!-- 1。债券任务提醒 -->
    <bean id="bonJobEmail" class="cn.forp.pitaya.base.controller.email.timer.BonJobEmailTimer">
    </bean>
    <!-- 2。 回墙任务提醒 -->
    <bean id="outWallEmail" 
    class="cn.forp.pitaya.base.controller.email.timer.OutWallEmailTimer">
    </bean>
    <!-- 3。其他邮件列表中的任务  提醒 -->
    <bean id="othEmailTask" class="cn.forp.pitaya.base.controller.email.timer.EmailTaskTimer">
    </bean>
    <!-- 4。ad域同步 -->
    <bean id="adomainJob" class="cn.forp.pitaya.base.controller.AdmainJobTimer"></bean>
    <!-- 5。CRM域同步 -->
    <bean id="crmSyncJob" class="cn.forp.pitaya.base.controller.CrmJobTimer"></bean>
    
    
    
    <!-- 2任务详情  -->
    <!-- 2.1债券任务详情 -->
    <bean id="bonJobEmailDetail" 
    class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="group" value="job_bonEmail" />
    <property name="name" value="job_work_bonEmail" />
    <!--false表示等上一个任务执行完后再开启新的任务 -->
    <property name="concurrent" value="false" />
    <property name="targetObject">
    <ref bean="bonJobEmail" />
    </property>
    <property name="targetMethod">
    <value>sendBonJobEmail</value>
    </property>
    </bean>
    <!-- 2.2 回墙邮件提醒 -->
    <bean id="outWallEmailDetail" 
    class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="group" value="job_wall" />
    <property name="name" value="job_work_wall" />
    <!--false表示等上一个任务执行完后再开启新的任务 -->
    <property name="concurrent" value="false" />
    <property name="targetObject">
    <ref bean="outWallEmail" />
    </property>
    <property name="targetMethod">
    <value>sendOutWallEmail</value>
    </property>
    </bean>
    <!--  2.3d域同步 任务详情-->
    <bean id="adJobDetail" 
    class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="group" value="job_adomain" />
    <property name="name" value="job_work_adomain" />
    <!--false表示等上一个任务执行完后再开启新的任务 -->
    <property name="concurrent" value="false" />
    <property name="targetObject">
    <ref bean="adomainJob" />
    </property>
    <property name="targetMethod">
    <value>run</value>
    </property>
    </bean>
    <!--2.4 邮件任务提醒 -->
    <bean id="othEmailTaskDetail" 
    class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="group" value="job_oth_email_wall" />
    <property name="name" value="job_work_oth_email_wall" />
    <!--false表示等上一个任务执行完后再开启新的任务 -->
    <property name="concurrent" value="false" />
    <property name="targetObject">
    <ref bean="othEmailTask" />
    </property>
    <property name="targetMethod">
    <value>sendEmailTask</value>
    </property>
    </bean>
    
    <!--  2.5d域同步 任务详情-->
    <bean id="crmJobDetail" 
    class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="group" value="job_crmJob" />
    <property name="name" value="job_work_crmJob" />
    <!--false表示等上一个任务执行完后再开启新的任务 -->
    <property name="concurrent" value="false" />
    <property name="targetObject">
    <ref bean="crmSyncJob" />
    </property>
    <property name="targetMethod">
    <value>run</value>
    </property>
    </bean>
    
    <bean id="crmJob5Detail" 
    class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="group" value="job_crmJob5" />
    <property name="name" value="job_work_crmJob5" />
    <!--false表示等上一个任务执行完后再开启新的任务 -->
    <property name="concurrent" value="false" />
    <property name="targetObject">
    <ref bean="crmSyncJob" />
    </property>
    <property name="targetMethod">
    <value>run5</value>
    </property>
    </bean>
    
    
    
    
    <!-- 3调度时间 -->
    <!-- 3.1债券任务触发事件  -->
    <bean id="bonJobEmailTrigger" 
    class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="name" value="work_bonEmail_name" />
    <property name="group" value="work_bonEmail" />
    <!-- 指向我们的任务 -->
    <property name="jobDetail">
    <ref bean="bonJobEmailDetail" />
    </property>
    <property name="cronExpression">
    <!-- 每天上午6点触发 -->
    <value>0 30 8 ? * *</value>
    </property>
    </bean>
    <!-- 3.2债券任务触发事件  -->
    <bean id="outWallEmailTrigger" 
    class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="name" value="work_wall_name" />
    <property name="group" value="work_wall" />
    <!-- 指向我们的任务 -->
    <property name="jobDetail">
    <ref bean="outWallEmailDetail" />
    </property>
    <property name="cronExpression">
    <!-- 每天上午6点触发 -->
    <value>0 0 9 ? * *</value>
    </property>
    </bean>
    <!-- 3.3ad域更新  -->
    <bean id="adomainTrigger" 
    class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="name" value="work_adomain_name" />
    <property name="group" value="work_adomain" />
    <!-- 指向我们的任务 -->
    <property name="jobDetail">
    <ref bean="adJobDetail" />
    </property>
    <property name="cronExpression">
    <value>0 45 8 ? * *</value>
    </property>
    </bean>
    <!-- 3.4 邮件列表发送任务  -->
    <bean id="othEmailTaskTrigger" 
    class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="name" value="work_oth_email_task_name" />
    <property name="group" value="work_oth_email_task" />
    <!-- 指向我们的任务 -->
    <property name="jobDetail">
    <ref bean="othEmailTaskDetail" />
    </property>
    <property name="cronExpression">
    <!-- 每天上午5点触发 -->
    <value>0 45 11 ? * *</value>
    </property>
    </bean>
    
    <!-- crm 每五分钟调度一次  -->
    <bean id="crmJob5Trigger" 
    class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="name" value="work_crmJob5_name" />
    <property name="group" value="work_crmJob5" />
    <!-- 指向我们的任务 -->
    <property name="jobDetail">
    <ref bean="crmJob5Detail" />
    </property>
    <!-- 每5分钟执行一次 -->
    <property name="cronExpression" ><value>0 0/5 * * * ?</value> </property>
    
    </bean>
    
    
    <!-- crm 每日调度一次  -->
    <bean id="crmJobTrigger" 
    class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="name" value="work_crmJob_name" />
    <property name="group" value="work_crmJob" />
    <!-- 指向我们的任务 -->
    <property name="jobDetail">
    <ref bean="crmJobDetail" />
    </property>
    <property name="cronExpression">
    <!-- 每天上午6点触发 -->
    <value>0 30 4 ? * *</value>
    </property>
    </bean>
    
    <!-- 开启任务调动 -->
    <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
    <list>
     <ref bean="bonJobEmailTrigger" /> 
    <ref bean="outWallEmailTrigger" />
    <ref bean="adomainTrigger" /> 
     <ref bean="othEmailTaskTrigger" />
     <ref bean="crmJobTrigger" />
     <ref bean="crmJob5Trigger" />
    </list>
    </property>
    </bean>
    
    </beans>


    EmailTaskTimer.java

    package cn.forp.pitaya.base.controller.email.timer;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.List;
    import java.util.Map;
    
    import org.apache.commons.lang.StringUtils;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import cn.forp.framework.core.FORP;
    import cn.forp.framework.platform.service.UserService;
    import cn.forp.framework.platform.vo.User;
    import cn.forp.pitaya.base.service.MailService;
    import cn.forp.pitaya.utils.Mail;
    
    public class EmailTaskTimer{
    private static final Logger lg = LoggerFactory.getLogger(EmailTaskTimer.class);
    private SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    
    public EmailTaskTimer() {
    lg.info("邮件列表发送任务 初始化。。.");
    }
    
    public void sendEmailTask() {
    lg.debug("===================================="+
    formatter.format(new Date())+"邮件发送任务提醒 Start.....
    ==================================================");
    if (FORP.SPRING_CONTEXT != null) {
    MailService mailService = FORP.SPRING_CONTEXT.getBean(MailService.class);
    UserService userService = FORP.SPRING_CONTEXT.getBean(UserService.class);
    
    User formUser = new User();
    formUser.setId(-1L);
    formUser.setEmail("ppag790776c4f842@sohu.com");
    
    List<Map<String,Object>> list = mailService.selEmailTasks();
    for (Map<String,Object> map:list) {
    try {
    if (map.containsKey("F_VALUE_003")) {
    Long userId = Long.valueOf(map.get("F_VALUE_003")
    .toString());
    if (userId!=null) {
    User user = userService.getLoad(userId);
    if (user!=null && StringUtils.isNotBlank
    (user.getEmail())) {
    String emailMessage = 
    Mail.getEmailTask(user, 
    map.get("F_VALUE_001").toString(), 
    map.get("F_VALUE_004").toString());
    Mail.sendEmails(formUser, 
    userId.toString(), null, 
    "未归档邮件提醒", emailMessage, 
    false, null);
    } else {
    lg.error("用户ID:"+userId+" 未找到,或邮箱地址为空  不发送邮件!");
    }
    }
    }
    } catch (Exception e) {
    lg.error("邮件发送提醒失败:"+e.getMessage());
    }
    }
    }
    lg.debug("===================================="+formatter.format(new Date())+"邮件发送提醒 End.....==================================================");
    }
    }


关键字词:spring,quartz,定时任务