使用Spring提供Quartz来实现定时任务

简介:

Spring功能越来越多了,用起来还很舒服方便,Quartz实现的定时任务就是一个。

首先是配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

    <!-- schedulerFactory -->
    <bean id="schedulerFactory"    class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>

      <!-- 有多少定时任务在这里写几个 -->
                <ref local="cronTriggerClaim" /> 
            </list>
        </property>
    </bean> 
    
    <!-- 1.AutoClaimReminderMailService 第一个定时任务-->
    <bean id="cronTriggerClaim" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail" ref="jobDetailClaim" />
        <property name="cronExpression">
                <value>0 10 13 ? * MON</value> <!-- 这里设定时间,周一的13点10分00秒 开始-->
        </property>
    </bean>    
    
    <bean id="jobDetailClaim"
        class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="claimScheduler" />  <!-- 这里找下面的bean-->
        <property name="targetMethod" value="sendRemiderMail" />  <!-- 这里设定定时任务的具体方法-->
    </bean>
    

   <!-- 这个类就是自己写的了,注意要实现上面提到的sendRemiderMail方法,其它可自便-->
    <bean id="claimScheduler" class="com.ibm.XXX.service.auto.AutoClaimReminderMailService">
        <property name="smtpServer"><value>smtp.163.com</value></property>
        <property name="smtpUsername"><value>unknown@163.com</value></property>
        <property name="smtpPassword"><value>puzzle</value></property>
        <property name="fromMailAddress"><value>unknown@163.com</value></property>
        <property name="toMailAddress"><value>unknown1@163.comm,unknown2@163.com</value></property>
        <property name="ccMailAddress"><value>unknow3@163.com,unknown4@163.com</value></property>
        <property name="bccMailAddress"><value>unknown5@163.com,unknown6@163.com</value></property>
    </bean>    
</beans>

下面是com.ibm.XXX.service.auto.AutoClaimReminderMailService类:

public class AutoClaimReminderMailService{
    private static Logger logger = Logger.getLogger(AutoClaimReminderMailService.class);
    
    public void sendRemiderMail() {
        String title="[Need Your Action!]Claim Reminder";
        
        StringBuilder sb=new StringBuilder();
        sb.append("<p>Hi Guys:</p>");
        sb.append("<p><B>Here is the claim reminder bell kindly for your action, pls submit your labor claim in ILC/Cats within today for this week, thanks your cooperation!</B></p>");    

            sendMail(title,sb.toString());
    }

 

    protected String smtpServer;
    protected String smtpUsername;
    protected String smtpPassword;
    protected String fromMailAddress;
    protected String toMailAddress;
    protected String ccMailAddress;
    protected String bccMailAddress;
    
    /**
     * 无参构造函数
     */
    public AutoClaimReminderMailService(){
        
    }

/**
     * 发送邮件的关键函数
     * 
     * @param title
     * @param content
     * @return
     * @throws Exception
     */
    protected boolean sendMail(String title,String content) throws Exception{
        Properties props = new Properties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.host", smtpServer);
        // 获得邮件会话对象
        Session session = Session.getDefaultInstance(props,new SmtpAuthenticator(smtpUsername, smtpPassword));
        /** *************************************************** */
        // 创建MIME邮件对象
        MimeMessage mimeMessage = new MimeMessage(session);
        mimeMessage.setFrom(new InternetAddress(fromMailAddress));// 发件人
        
        mimeMessage.setRecipients(Message.RecipientType.TO, getInternetAddressArr(toMailAddress));// To收件人
        mimeMessage.setRecipients(Message.RecipientType.CC, getInternetAddressArr(ccMailAddress));// Cc收件人
        mimeMessage.setRecipients(Message.RecipientType.BCC, getInternetAddressArr(bccMailAddress));// Bcc收件人
        
        mimeMessage.setSubject(title);
        mimeMessage.setSentDate(new Date());// 发送日期
        Multipart mp = new MimeMultipart("related");// related意味着可以发送html格式的邮件
        /** *************************************************** */
        BodyPart bodyPart = new MimeBodyPart();// 正文
        bodyPart.setDataHandler(new DataHandler(content,"text/html;charset=utf8"));// 网页格式
        mp.addBodyPart(bodyPart);
        mimeMessage.setContent(mp);// 设置邮件内容对象
        Transport.send(mimeMessage);// 发送邮件        
        
        return true;
    }
    
    protected InternetAddress[] getInternetAddressArr(String mialAddr) throws Exception{
        String[] arr=mialAddr.split(",");
        
        InternetAddress[] retval=new InternetAddress[arr.length];
        
        for(int i=0;i<arr.length;i++){
            retval[i]=new InternetAddress(arr[i]);
        }
        
        return retval;
    }
}

 

就到这里,再见吧。













本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/xiandedanteng/p/3329562.html,如需转载请自行联系原作者



相关文章
|
1月前
|
druid Java 数据库
Spring Boot的定时任务与异步任务
Spring Boot的定时任务与异步任务
|
3月前
|
Java 调度 Maven
Spring Task 自定义定时任务类
Spring Task 自定义定时任务类
36 0
|
1月前
|
Java BI 调度
Spring Boot 整合xxl-job实现分布式定时任务
XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 xxl是xxl-job的开发者大众点评的许雪里名称的拼音开头。
|
2月前
spring3.0定时任务
spring3.0定时任务
|
2月前
|
监控 Java 测试技术
Spring Boot和XXL-Job:高效定时任务管理
Spring Boot和XXL-Job:高效定时任务管理
55 0
|
4月前
|
Java Spring
定时任务schedule(spring boot )
定时任务schedule(spring boot )
46 0
|
4月前
|
Java Linux 调度
Java【付诸实践 03】Spring定时任务注解@Scheduled+@EnableAsync用法详解(简单说明+应用场景+demo源代码+执行过程分析)
Java【付诸实践 03】Spring定时任务注解@Scheduled+@EnableAsync用法详解(简单说明+应用场景+demo源代码+执行过程分析)
51 2
|
4月前
|
Java 调度 Docker
Spring Boot 3 整合 xxl-job 实现分布式定时任务调度,结合 Docker 容器化部署(图文指南)
Spring Boot 3 整合 xxl-job 实现分布式定时任务调度,结合 Docker 容器化部署(图文指南)
Spring Boot 3 整合 xxl-job 实现分布式定时任务调度,结合 Docker 容器化部署(图文指南)
|
9月前
|
Java Spring
设置 Spring Boot 的定时任务线程池以优雅退出
设置 Spring Boot 的定时任务线程池以优雅退出
185 0
|
5月前
|
Java Spring
spring集成Quartz时区问题造成任务晚执行八小时
spring集成Quartz时区问题造成任务晚执行八小时