Spring2.5框架下面使用quartz的简单方法

无聊下载了quartz的jar包,配置了一个在spring框架下的定时操作,发送一封邮件玩玩吧

列出来使用的jar包:
commons-collections-3.2.jar
commons-logging.jar

spring-2.5.1.jar

quartz-all-1.6.5.jar

mail.jar
activation.jar

说明:
1。如果使用MyEclipse来添加spring2.5的支持,默认添加的是分类别的jar包,省事的话就使用这种综合包吧。如果spring使用的不是2.5版本,需要手动拷贝一个spring-context-support.jar文件到lib目录下面。另外,由于使用commons-collections-3.2.jar,为了防止jar包冲突,将项目源代码lib中的commons-collections-2.1.1删掉。

2。我没有使用javaee.jar包,因为这只是一个示范项目,没那么麻烦。正式的web项目可能会使用javaee.jar,这样与JavaMail的jar包又会冲突了,方法是把javaee.jar里面的mail和activation目录删掉,使用独立的jar包。原项目里的目录大概是在eclipse下面的Genuitec\Common\plugins目录里,搜一下javaee.jar

3。mail.jar和activation.jar的下载地址:
http://java.sun.com/products/javamail/downloads/index.html
http://java.sun.com/products/javabeans/jaf/downloads/index.html
下载javamail-1.4.3.zip和jaf-1_1_1.zip两个包,取其中的mail.jar和activaction.jar即可。


第一步,在web.xml文件中添加spring支持

  <servlet>
    <servlet-name>spring</servlet-name>
    <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  
  <servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
  </context-param>




第二步,在spring的上下文中添加quartz配置信息
下面的配置就是说在每天的早晨6点执行SayHello类中的sayHello方法

  <bean id="sayHello" class="test.SayHello" />
  
  <bean id="reportTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="targetObject" ref="sayHello" />
    <property name="targetMethod" value="say" />
    <property name="concurrent" value="false" />
  </bean>
  
  <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="jobDetail" ref="reportTask" />
    <property name="cronExpression" value="0 0 6 * * ?" />
  </bean>
  
  <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
      <list>
        <ref bean="cronTrigger" />
      </list>
    </property>
  </bean>



第三步,就是编写SayHello类中的sayHello方法,调用发送邮件的任务
SayHello.java

  package test;
  public class SayHello {
  
    public void say(){
      System.out.println("-----------发送邮件!---------");
      sendMail();
      System.out.println("-----------发送成功!---------");
    }
    
    public void sendMail() {
      try {
  
        Properties props = new Properties();
        Session sendsession;
        Transport transport;
  
        // 向属性中写入SMTP服务器的地址
        props.put("mail.smtp.host", "smtp.163.com");
  
        // 设置SMTP服务器需要权限认证
        props.put("mail.smtp.auth", "true");
  
        // 设置输出调试信息
        sendsession = Session.getInstance(props, null);
        sendsession.setDebug(true);
  
        // 根据Session生成Message对象
        Message message = new MimeMessage(sendsession);
  
        // 设置发信人地址
        message.setFrom(new InternetAddress("发件人"));
  
        // 设置收信人地址
        message.setRecipient(Message.RecipientType.TO, new InternetAddress(
            "收件人"));
  
        // 设置E-mail标题
        message.setSubject("标题");
  
        // 发送html格式的邮件
        // 新建一个存放信件内容的BodyPart对象
        BodyPart mdp = new MimeBodyPart();
  
        // 给BodyPart对象设置内容和格式/编码方式
        mdp.setContent("内容", "text/html;charset=gb2312");
  
        // 新建一个MimeMultipart对象用来存放BodyPart对(事实上可以存放多个)
        Multipart mm = new MimeMultipart();
  
        // 将BodyPart加入到MimeMultipart对象中(可以加入多个BodyPart)
        mm.addBodyPart(mdp);
  
        // 设置E-mail内容
        message.setContent(mm);
  
        // 保存对于E-mail的修改
        message.saveChanges();
  
        // 根据Session生成Transport对象
        transport = sendsession.getTransport("smtp");
  
        // 连接到SMTP服务器
        transport.connect("smtp.163.com", "发件人邮箱", "密码");
  
        // 发送E-mail
        transport.sendMessage(message, message.getAllRecipients());
  
        // 关闭Transport连接
        transport.close();
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
    
  }

 

你可能感兴趣的:(spring,框架,bean,servlet,quartz)