一、编写简单定时器
1.先附上配置文件核心代码applicationContext-quartz.xml:
<!-- ======================== 调度工厂 ======================== -->
<bean id="springJobSchedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="sendMailTriggerBean" />
<!--
<ref bean="synStatusTriggerBean"/>
-->
</list>
</property>
</bean>
下面一般是三对bean一起出现:
<bean id="sendMailQtzJob" class="com.yolanda.sh.quartz.SendMailQuartz"></bean>
<bean id="sendMailQtzJobMethod"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="sendMailQtzJob" />
<property name="targetMethod" value="execute" />
<property name="concurrent" value="false" />
</bean>
<bean id="sendMailTriggerBean" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="sendMailQtzJobMethod"></property>
<property name="cronExpression" value="0/30 * * * * ?"></property>
</bean>
最后一行表示定时器运行频率,“秒 分 时 日 月 年”的顺序,0/30表示从第0秒钟开始每隔30秒钟发送一次
二、发送邮件
1.写quartz类SendMailQuartz.java
import java.util.Date;
public class SendMailQuartz{
public void execute() {
System.out.println("mail quartz start" + new Date());
}
}
结果:
2.写工具类
(1)MailAuthenticator.java
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
class MailAuthenticator extends Authenticator {
private String user;
private String pwd;
public MailAuthenticator(String user, String pwd) {
this.user = user;
this.pwd = pwd;
}
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user, pwd);
}
}
(2)MailInfo.java
import java.util.List;
import java.util.Properties;
import javax.activation.DataSource;
public class MailInfo {
/**
* 发送邮件的服务器的IP
*/
private String mailServerHost;
/**
* 邮件发送者的地址
*/
private String fromAddress;
/**
* 邮件发送者的名字
*/
private String fromName;
/**
* 邮件接受者的地址
*/
private String[] toAddress;
/**
* 登陆邮件发送服务器的密码
*/
private String password;
/**
* 是否需要身份验证
*/
private boolean validate = true;
/**
* 邮件主题
*/
private String subject;
/**
* 邮件的文本内容
*/
private String content;
/**
* 邮件附件的文件名
*/
private String[] attachFileNames;
/**
* 邮件附件
*/
private List<DataSource> fdsList;
/**
* 不带参数的默认构造器
*/
public MailInfo() {
}
/**
*
* @param mailServerHost
* @param fromAddress
* @param toAddress
* @param userName
* @param password
* @param subject
* @param content
* @param attachFileNames
* @param fdsList
*/
public MailInfo(String mailServerHost, String fromAddress,
String[] toAddress, String userName, String password,
String subject, String content, String[] attachFileNames,
List<DataSource> fdsList) {
super();
this.mailServerHost = mailServerHost;
this.fromAddress = fromAddress;
this.toAddress = toAddress;
this.userName = userName;
this.password = password;
this.subject = subject;
this.content = content;
this.attachFileNames = attachFileNames;
this.fdsList = fdsList;
}
/**
* 获取邮件回话属性
*/
public Properties getProperties() {
Properties p = new Properties();
p.put("mail.smtp.host", this.mailServerHost);
p.put("mail.smtp.auth", validate ? "true" : "false");
p.put("proxySet ", "true ");
return p;
}
/**
* 发送邮件的服务器的IP
*/
public String getMailServerHost() {
return mailServerHost;
}
/**
* 发送邮件的服务器的IP
*/
public void setMailServerHost(String mailServerHost) {
this.mailServerHost = mailServerHost;
}
/**
* 邮件发送者的地址
*/
public String getFromAddress() {
return fromAddress;
}
/**
* 邮件发送者的地址
*/
public void setFromAddress(String fromAddress) {
this.fromAddress = fromAddress;
}
/**
* 邮件接受者的地址
*/
// public String[] getToAddress() {
// return toAddress;
// }
public String[] getToAddress() {
return toAddress;
}
/**
* 邮件接受者的地址
*/
public void setToAddress(String[] toAddress) {
this.toAddress = toAddress;
}
/**
* 登陆邮件发送服务器的密码
*/
public String getPassword() {
return password;
}
/**
* 登陆邮件发送服务器的密码
*/
public void setPassword(String password) {
this.password = password;
}
/**
* 邮件主题
*/
public String getSubject() {
return subject;
}
/**
* 邮件主题
*/
public void setSubject(String subject) {
this.subject = subject;
}
/**
* 邮件的文本内容
*/
public String getContent() {
return content;
}
/**
* 邮件的文本内容
*/
public void setContent(String content) {
this.content = content;
}
/**
* 邮件附件的文件名
*/
public String[] getAttachFileNames() {
return attachFileNames;
}
/**
* 邮件附件的文件名
*/
public void setAttachFileNames(String[] attachFileNames) {
this.attachFileNames = attachFileNames;
}
/**
* 是否需要身份验证
*/
public boolean isValidate() {
return validate;
}
/**
* 是否需要身份验证
*/
public void setValidate(boolean validate) {
this.validate = validate;
}
/**
* 邮件附件的文件名
*/
public List<DataSource> getFdsList() {
return fdsList;
}
/**
* 邮件附件的文件名
*/
public void setFdsList(List<DataSource> fdsList) {
this.fdsList = fdsList;
}
/**
* 邮件发送者的名字
*/
public String getFromName() {
return fromName;
}
/**
* 邮件发送者的名字
*/
public void setFromName(String fromName) {
this.fromName = fromName;
}
}
(3)MailUtil.java
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;
/**
* <pre>
* <strong>说明:</strong>
* 邮件发送器
* </pre>
*
* @author
* @version
*/
@Service("mailUtil")
public class MailUtil {
private static Logger log;
static {
log = Logger.getLogger(MailUtil.class);// .getClassLoader().getResourceAsStream("resource/hjkl.txt")
}
/**
* 发送邮件
*
* @param toAddress
* @param subject
* @param content
* @return
*/
public boolean sendEmail(String toAddress, String subject, String content) {
MailInfo emailInfo = new MailInfo();
if (CommonUtil.isNullOrEmpty(Config.get("MAIL_SERVER_HOST")) || CommonUtil.isNullOrEmpty(Config.get("MAIL_ADMIN_ADDRESS"))
|| CommonUtil.isNullOrEmpty(Config.get("MAIL_ADMIN_NAME"))) {
log.error("sendEmail:邮件服务器IP、地址和名字为空");
return false;
}
emailInfo.setMailServerHost(Config.get("MAIL_SERVER_HOST"));
emailInfo.setFromAddress(Config.get("MAIL_ADMIN_ADDRESS"));
emailInfo.setFromName(Config.get("MAIL_ADMIN_NAME"));
if (CommonUtil.isNullOrEmpty(toAddress)) {
log.error("邮件地址为空!");
return false;
}
String[] ToAddresses = toAddress.split(";");
if (null == ToAddresses) {
log.error("邮件地址为空!");
return false;
}
emailInfo.setToAddress(ToAddresses);
emailInfo.setUserName(Config.get("MAIL_USER_NAME"));
emailInfo.setPassword(Config.get("MAIL_PASSWORD"));
emailInfo.setSubject(subject);
if (CommonUtil.isNullOrEmpty(content)) {
log.error("邮件内容为空!");
}
emailInfo.setContent(content);
if (!sendHtmlMail(emailInfo)) {
log.error("以HTML格式发送邮件失败!");
return false;
}
return true;
}
/**
* 发送邮件
*
* @param toAddress
* @param subject
* @param content
* @return
*/
public boolean sendEmailWithAttachments(String toAddress, String subject, String content, List<DataSource> fdsList) {
MailInfo emailInfo = new MailInfo();
if (CommonUtil.isNullOrEmpty(Config.get("MAIL_SERVER_HOST")) || CommonUtil.isNullOrEmpty(Config.get("MAIL_ADMIN_ADDRESS"))
|| CommonUtil.isNullOrEmpty(Config.get("MAIL_ADMIN_NAME"))) {
log.error("sendEmail:邮件服务器IP、地址和名字为空");
return false;
}
emailInfo.setMailServerHost(Config.get("MAIL_SERVER_HOST"));
emailInfo.setFromAddress(Config.get("MAIL_ADMIN_ADDRESS"));
emailInfo.setFromName(Config.get("MAIL_ADMIN_NAME"));
emailInfo.setFdsList(fdsList);
if (CommonUtil.isNullOrEmpty(toAddress)) {
log.error("邮件地址为空!");
return false;
}
String[] ToAddresses = toAddress.split(";");
if (null == ToAddresses) {
log.error("邮件地址为空!");
return false;
}
emailInfo.setToAddress(ToAddresses);
emailInfo.setUserName(Config.get("MAIL_USER_NAME"));
emailInfo.setPassword(Config.get("MAIL_PASSWORD"));
emailInfo.setSubject(subject);
if (CommonUtil.isNullOrEmpty(content)) {
log.error("邮件内容为空!");
}
emailInfo.setContent(content);
if (!sendHtmlMail(emailInfo)) {
log.error("以HTML格式发送邮件失败!");
return false;
}
return true;
}
}
3.在quartz类SendMailQuartz.java中添加发送邮件功能
public class SendMailQuartz{
public void execute() {
long startTime = System.currentTimeMillis();
System.out.println("mail quartz start");
//发送
String mailAddress[] = Config.get("MAIL_ADDRESS").split(";");
for (int i = 0; i < mailAddress.length; i++) {
new MailUtil().sendEmail(mailAddress[i], Config.get("MAIL_SUBJECT"), Config.get("MAIL_CONTENT"));
}
System.out.println("mail quartz end , used : " + (System.currentTimeMillis() - startTime) + "ms");
}
}
数据库部分可以直接换成相应字符串
发送成功结果:
查收邮箱即可收到测试邮件