最近做项目时客户提出了一个需求:系统定时发送E-mail到其客户,达到通知的效果。先将实例分享给大家,如果确实有一些帮助的话,请大家来点掌声!
首先介绍java定时器(java.util.Timer)有定时执行计划任务的功能,通过设定定时器的间隔时间,会自动在此间隔时间后执行预先安排好的任务(java.util. TimerTask)
如: 每隔一个小时执行任务 timer.schedule(TimerTask, 0, 60 * 60 * 1000);
schedule方法的第一个参数是需要执行的任务,此类的类型为java.util.TimerTask,第二个参数为执行任务前等待时间,此处0表示不等待,第三个参数为间隔时间,单位为毫秒
由于我们希望当Web工程启动时,定时器能自动开始计时,这样在整个Web工程的生命期里,就会定时的执行任务,因此启动定时器的类不能是一般的类,此处用Servlet的监听器类来启动定时器,通过在配置文件里配置此监听器, 让其在工程启动时自动加载运行,存活期为整个Web工程生命期.
要运用Servlet侦听器需要实现javax.servlet.ServletContextListener接口,以下是实例:
public class MyTimerTask implements ServletContextListener
{
private Timer timer = null;
public void contextDestroyed(ServletContextEvent event)
{
timer.cancel();
event.getServletContext().log("定时器销毁");
}
public void contextInitialized(ServletContextEvent event)
{
//在这里初始化监听器,在tomcat启动的时候监听器启动,可以在这里实现定时器功能
timer = new Timer(true);
event.getServletContext().log("定时器已启动");//添加日志,可在tomcat日志中查看到
//调用exportHistoryBean,0表示任务无延迟,5*1000表示每隔5秒执行任务,60*60*1000表示一个小时;
timer.schedule(new SendEmail(event.getServletContext()),0,24*60*60*1000);
}
}
使用javamail发送邮件需要两个包(下面我上传的有,下载即可):activation.jar mail.jar将这两个报发到项目的lib目录下
public class SendEmail extends TimerTask
{
private ServletContext context = null;
public SendEmail(ServletContext context)
{
this.context = context;
}
@Override
public void run()
{
/*
* 以下为javamail的邮件发送
*/
System.out.println("正在发送邮件");
Properties props=new Properties();
props.put("mail.smtp.host","smtp.163.com");//发件人使用发邮件的电子信箱服务器我使用的是163的服务器
props.put("mail.smtp.auth","true"); //这样才能通过验证
Session s=Session.getInstance(props);
s.setDebug(true);
MimeMessage message=new MimeMessage(s);
//给消息对象设置发件人/收件人/主题/发信时间
InternetAddress from=new InternetAddress("daida@163.com"); //发邮件的出发地(发件人的信箱),这是我的邮箱地址,使用请改成你的有效地址
message.setFrom(from);
InternetAddress to=new InternetAddress(tto);// tto为发邮件的目的地(收件人信箱)
message.setRecipient(Message.RecipientType.TO,to);
message.setSubject(ttitle);// ttitle为邮件的标题
message.setSentDate(new Date());
BodyPart mdp=new MimeBodyPart();//新建一个存放信件内容的BodyPart对象
mdp.setContent(tcontent,"text/html;charset=utf-8");//给BodyPart对象设置内容和格式/编码方式tcontent为邮件内容
Multipart mm=new MimeMultipart();//新建一个MimeMultipart对象用来存放BodyPart对
//象(事实上可以存放多个)
mm.addBodyPart(mdp);//将BodyPart加入到MimeMultipart对象中(可以加入多个BodyPart)
message.setContent(mm);//把mm作为消息对象的内容
message.saveChanges();
Transport transport=s.getTransport("smtp");
transport.connect("smtp.163.com","daida","789-jik");//发邮件人帐户密码,此外是我的帐户密码,使用时请修改。
transport.sendMessage(message,message.getAllRecipients());
transport.close();
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
}
该定时器在web.xml中的配置为:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<listener>
<listener-class>cachay.saga.utils.MyTimerTask</listener-class>
</listener>
</web-app>
至此,所有操作均已完成,good luck !
分享到:
相关推荐
Java定时器定时调用任务是Java编程中一个重要的功能,它允许开发者在特定的时间间隔执行某项任务,比如定期检查数据库、发送邮件或者执行维护操作等。Java中的定时任务实现通常涉及`java.util.Timer`类和`java.util....
Java Web定时器主要指的是在Java Web应用程序中实现定时任务的功能,这在许多业务场景中都是必要的,例如数据备份、报表生成、邮件发送等。在Java中,我们可以利用内置的`java.util.Timer`类或者Spring框架的`@...
在使用JAVA定时器时,需要注意以下几点: * 在中不能够设置default-lazy-init="true",否则定时任务不触发。 * 在中不能够设置default-autowire="byName"的属性,否则后台会报org.springframework.beans.factory....
Java定时器,也被称为Java定时任务,是Java编程语言中用于执行预定任务的重要工具。它允许程序员设置在未来某个时间点或按照一定周期执行特定代码,从而实现自动化操作。在Java中,有两个主要类用于实现定时任务:`...
在Java编程中,实现定时发送信息的功能,可以利用Java的定时任务处理库,例如`java.util.Timer`类或`java.util.concurrent.ScheduledExecutorService`。这些工具可以帮助我们创建一个类似于闹钟的服务,按照预设的...
本文将深入探讨Java定时器的原理与应用,通过实例演示如何使用`java.util.Timer`和`java.util.TimerTask`类来创建和管理定时任务。 #### 二、Java定时器基础 ##### 1. `java.util.Timer`类 `Timer`类位于`java....
- 定时发送邮件或短信通知。 - 清理缓存或日志文件。 总结来说,Java定时器`Timer`是一个实用的工具,可以方便地实现定时任务调度,但在高并发场景下,由于其单线程模型,可能需要考虑使用更高级的并发工具,如`...
- 定时任务:通过定时器定期检查新邮件,而不是实时轮询,以减少不必要的请求。 总之,通过Java结合Exchange协议,我们可以构建高效且可靠的邮件系统,实现与Exchange服务器的无缝交互,无论是发送商业邮件、自动化...
Java中的定时任务与定时器是实现自动化操作的关键技术之一,特别是在需要周期性执行某些功能的场景下,如数据同步、日志清理、定时发送邮件等。本文将深入探讨如何使用Java标准库中的`java.util.Timer`和`java.util....
标题与描述均提到了“Java_Timer定时器实例_Spring实例”,这表明文章主要讨论的是如何在Java中使用Timer类创建定时任务,并将其整合到Spring框架中。以下是对该主题的详细解析: ### Java中的Timer定时器 #### ...
在Java应用程序中,我们常常会用到这些功能,比如数据同步、定时发送邮件、定期检查更新等。 `java.util.Timer`类是定时器类,它可以安排多个任务,并按照预定的时间间隔或时间点执行。创建一个Timer对象后,可以...
在Spring框架中,定时任务是常见的需求,例如用于执行定期数据同步、日志清理或发送邮件等。Quartz是一款强大的开源任务调度库,它能够与Java应用程序无缝集成,实现复杂的时间触发任务。当我们遇到Spring定时器执行...
Java提供了`java.util.Timer`类来实现定时器功能,通过创建`Timer`实例并结合`TimerTask`子类,可以轻松实现定时任务的调度。 #### 二、定时器类(`Timer`) 在Java中,`Timer`类是核心组件,用于调度定时任务。它...
在定时发送邮件的情况下,你可以结合Java的定时任务框架,如`java.util.Timer`或`java.util.concurrent.ScheduledExecutorService`,来定期执行邮件发送任务。例如,你可以创建一个定时器任务,每隔一段时间检查是否...
例如,定期清理缓存、定时发送邮件或执行数据同步等操作。Java提供了多种方式来实现定时任务,其中之一就是利用内置的`java.util.Timer`类。本文将详细介绍如何使用`Timer`类结合`ServletContextListener`接口来实现...
定时器在软件开发中扮演着重要的角色,尤其是在需要定期执行某些任务的场景下,如监控、数据备份、任务调度等。Java 提供了 `java.util...这种机制在许多实际应用场景中都非常实用,如监控、数据同步、定时邮件发送等。
它主要用于处理那些需要定期执行的任务,比如更新用户界面、发送电子邮件通知等场景。通过`Timer`类,可以方便地创建并管理这些定时任务。 #### 示例代码解析 给定的示例代码展示了如何使用`Timer`类来创建一个...