基于maven的SSH项目结合quzrtz定时发送邮件

1.首先在项目中创建maven子项目job包,并在job文件夹下的pom.xml文件中引入依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>cn.lichenyang</groupId>
    <artifactId>e05-dms</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>e05-dms-job</artifactId>
  
  <dependencies>
  		<dependency>	<!-- 因为job中需要写实体类和dao接口,所以调用e05-dms-service -->
			<groupId>cn.lichenyang</groupId>
			<artifactId>e05-dms-service</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>
  
   	   <!-- 引入Spring-support -->
	    <dependency>
	        <groupId>org.springframework</groupId>
	        <artifactId>spring-context-support</artifactId>
	    </dependency>
	    <!-- 引入QuartZ ,也可以引入最新的2.2.3版本-->
	    <dependency>
	        <groupId>org.quartz-scheduler</groupId>
	        <artifactId>quartz</artifactId>
	    </dependency>
	    <dependency>
	        <groupId>org.quartz-scheduler</groupId>
	        <artifactId>quartz-jobs</artifactId>
	    </dependency>
	    
	    <!-- https://mvnrepository.com/artifact/javax.mail/mail -->
		<dependency>
		    <groupId>javax.mail</groupId>
		    <artifactId>mail</artifactId>
		    <version>1.4</version>
		</dependency>
  
  </dependencies>
  
</project>

2.在job文件夹下创建作业类


3.定义作业类中的方法:(注意,这里导入的是javax.mail的包)

package cn.lichenyang.dms.job;

import java.util.List;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import org.springframework.beans.factory.annotation.Autowired;

import cn.lichenyang.dms.entity.QpWorkbill;
import cn.lichenyang.dms.service.IQpWorkbillService;


public class MailJob {
	 //注入工单service
    @Autowired	//这个是我的一个接口:(发送邮件的条件),你们可以要也可以不用,不过需要自己设置发送邮件的条件
    private IQpWorkbillService workbillService;

    private String username;	//发件人的邮箱账号
    private String smtpServer;	//服务器
    private String authCode;	//授权码

    public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getSmtpServer() {
		return smtpServer;
	}
	public void setSmtpServer(String smtpServer) {
		this.smtpServer = smtpServer;
	}
	public String getAuthCode() {
		return authCode;
	}
	public void setAuthCode(String authCode) {
		this.authCode = authCode;
	}



	/**
     * 执行发送邮件任务的方法
     */
    public void execute(){

    	System.err.println("要发邮件了");
        try {
            //查询工单类型为新单的所有工单
        	QpWorkbill example = new QpWorkbill();
        	example.setType("新单");
        	example.setPickstate("未取件");
        	
        	//接口中根据条件查询出满足条件的集合
            List<QpWorkbill> list = workbillService.queryByExample(example);
            //以上4句都是判断发送邮件的方法
            
            //如果条件成立,则进行接下来的作业
            if (null != list && list.size() > 0) {
                final Properties mailProps = new Properties();
                mailProps.put("mail.smtp.host", this.getSmtpServer());
                mailProps.put("mail.smtp.auth", "true");
                mailProps.put("mail.username", this.getUsername());
                mailProps.put("mail.auth.code", this.getAuthCode());

                //构建授权信息,用于进行SMTP进行身份验证
                Authenticator authenticator = new Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
                        //用户名、密码
                        String userName = mailProps.getProperty("mail.username");
                        String password = mailProps.getProperty("mail.auth.code");

                        return new PasswordAuthentication(userName, password);
                    }
                };

                //使用环境属性和授权信息,创建邮件会话
                Session mailSession = Session.getInstance(mailProps, authenticator);

                for (QpWorkbill workBill : list) {		//对对集合中所有满足条件的人发送邮件
                    //创建邮件消息
                    MimeMessage message = new MimeMessage(mailSession);
                    //设置发件人
                    InternetAddress from = new InternetAddress(mailProps.getProperty("mail.username"));
                    message.setFrom(from);

                    //设置收件人	163只能发给163,qq只能发给qq
                    InternetAddress to = new InternetAddress("[email protected]");	
                    message.setRecipient(RecipientType.TO, to);

                    //设置邮件标题
                    message.setSubject("刺激不");

                    //设置邮件的内容体
                    message.setContent("刺激不????哈哈哈哈哈哈哈哈哈哈哈哈哈","text/html;charset=UTF-8");
                    //发送邮件
                    Transport.send(message);
                    System.err.println("发送完成");
                }
            }
        } catch (AddressException e) {
            e.printStackTrace();
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
}

4.在web的pom文件中要添加一个job文件夹的依赖


5.在web文件夹下创建spring-quzrtz.xml文件(我的名字貌似起错了,应该是quzrtz的)


6.在quzrtz配置文件中的内容:(xml文件要能被web文件读到)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:p="http://www.springframework.org/schema/p"  
	xmlns:aop="http://www.springframework.org/schema/aop" 
	xmlns:tx="http://www.springframework.org/schema/tx"
	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-4.2.xsd
	http://www.springframework.org/schema/context 
	http://www.springframework.org/schema/context/spring-context-4.2.xsd
	http://www.springframework.org/schema/aop 
	http://www.springframework.org/schema/aop/spring-aop-4.2.xsd 
	http://www.springframework.org/schema/tx 
	http://www.springframework.org/schema/tx/spring-tx-4.2.xsd 
	http://www.springframework.org/schema/util 
	http://www.springframework.org/schema/util/spring-util-4.2.xsd 
	">

	<!-- 注册自定义作业类 -->	<!-- 如果没有在pom文件夹下设置job的依赖,这个class就出不来 -->
	<bean id="myJob" class="cn.lichenyang.dms.job.MailJob">
		<property name="username" value="[email protected]"></property>	<!-- 发件人的邮箱名 -->
		<property name="smtpServer" value="smtp.163.com"></property>	<!-- 格式:smtp.xxx.com -->
		<property name="authCode" value="xxxx"></property>		<!-- 发件人的授权码 -->
	</bean>

	<!-- 配置jobDetail -->
	<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<!-- 注入目标对象 -->
		<property name="targetObject" ref="myJob"/>
		<!-- 注入目标方法 -->
		<property name="targetMethod" value="execute"/>
	</bean>

	<!-- 配置触发器 -->
	<bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
		<!-- 注入任务详情对象 -->
		<property name="jobDetail" ref="jobDetail"></property>
		<!-- 注入cron表达式,通过这个表达式制定出发的时间点 -->
		<property name="cronExpression">
			<value> 0/40 * * * * ?</value>	<!-- 第一个表示秒,第二个是分,第三个是时,具体的写法会发到会最下面,自己去看 -->
		</property>
	</bean>

	<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<!-- 注入触发器 -->
		<property name="triggers">
			<list>
				<ref bean="myTrigger"/>
			</list>		
		</property>
	</bean>
</beans>


猜你喜欢

转载自blog.csdn.net/qq_37385585/article/details/79782073