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("xxxxx@163.com");
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="xxxxx@163.com"></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>