在web开发中,我们经常需要定时完成一些功能。比如定义统计报表啊,统计用户排名等等。利用spring就可以轻松地做到这些任务。下面我就以定时发送邮件来来展示如何利用spring定时发送邮件,以及spring对JavaMail的简化。
MailService.java类
package com.open.quartz;
import org.springframework.mail.MailException;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;
public class MailService {
    
private MailSender mailSender;
    
private SimpleMailMessage mailMessage;//邮件模板
    
public void sendMail() {
        System.out.println(
"-----------发送邮件!---------");
        SimpleMailMessage msg
=new SimpleMailMessage(this.mailMessage);
        msg.setText(
"this is a test mail");
        
try {
            mailSender.send(msg);
        }
 catch (MailException e) {
            e.printStackTrace();
        }

        System.out.println(
"-----------发送成功!---------");
    }

     
//省略set,get方法
}
在web.xml里添加以下代码
<listener>
        
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    
</listener>
在WEB-INF目录下添加applicationContext.xml文件
<beans>
    
<bean id="mailSender"
        class
="org.springframework.mail.javamail.JavaMailSenderImpl">
        
<property name="host" value="smtp.163.com"/>
            <!-- 有些邮件服务器发送邮件需要认证,所以必须提供帐号  -->
        
<property name="username" value="填入用户名"/>
        
<property name="password" value="填入密码"/>
        
<property name="javaMailProperties">
            
<props>
                
<prop key="mail.smtp.auth">true</prop>
            
</props>
        
</property>
    
</bean>
    <!--一个邮件模板-->
    
<bean id="mailMessage" class="org.springframework.mail.SimpleMailMessage">
        
<property name="to" value="asm_c_yuan@163.com"/>
        
<property name="from" value="asm_c_yuan@163.com"/>
        
<property name="subject" value="test"/>
    
</bean>
        <bean id="ms" class="com.open.quartz.MailService" autowire="byName"/>
    
<bean id="reportJob"
        class
="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        
<property name="targetObject" ref="ms"/>
        
<property name="targetMethod" value="sendMail"/>
    
</bean>
       <!--一个简单的调度器-->
    
<bean id="simpleTrigger"
        class
="org.springframework.scheduling.quartz.SimpleTriggerBean">
        
<property name="jobDetail" ref="reportJob"/>
        
<property name="startDelay" value="1"/>   在web启动多少毫秒后启动任务
        
<property name="repeatInterval" value="100000000"/> 表示没隔多少毫秒启动
    
</bean>
       <!--一个定时的调度器-->
    
<bean id="cronTrigger"
        class
="org.springframework.scheduling.quartz.CronTriggerBean">
        
<property name="jobDetail" ref="reportJob"/>
        
<property name="cronExpression" value="0 0 6 * * ?"/> 指明每天早上6点启动任务,表达式的解释见下篇文章
    
</bean>
    
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        
<property name="triggers">
            
<list>
                
<ref bean="simpleTrigger"/>
            
</list>
        
</property>
    
</bean>
</bean>
涉及的jar包有:spring.jar,javamail.jar,activation.jar,quartz.jar