本文目录一览:
- 1、跪求短信发送的java实现类,各位大哥大姐,帮帮俺。。。。
- 2、如何用JAVA实现发送手机短信
- 3、java如何实现发送短信验证码功能?
- 4、java怎么实现群发短信的功能
- 5、如何用Java实现短信自动发送功能
跪求短信发送的java实现类,各位大哥大姐,帮帮俺。。。。
1.发送电子邮件
首先应该构建JavaMail的开发环境,在JDK中配置JavaMail的相关类和包。在构建JavaMail开发环境中,需要mail.jar和activation.jar这两个文件。这两个文件的获得可以通过SUN公司的官方网站下载。
JavaMail对STMP、POP3、IMAP提供支持,封装了电子邮件功能中的邮件对象、发送、身份验证、接收等功能。
在发送各种类型的邮件时,主要应用到下面几个类:
1)Session类。用户要想发送邮件首先需要创建Session类的对象,利用这个对象创建邮件对象、指定邮件服务器认证的客户端属性。它的类层次为javax.mail.Session。
2)InternetAddress类。邮件发送的地址类,类层次结构是javax.mail.internet.InternetAddress,它继承自抽象类javax.mail.Address。
3)MimeMessage类。邮件消息类,它的类层次结构是javax.mail.internet.MimeMessage,继承自抽象类javax.mail.Message。
4)Transport类。邮件发送类,它的类层次结构是javax.mail.Transport。
5)Authenticator类。授权者类,JavaMail通过使用Authenticator类以用户名、密码的方式访问那些受到保护的资源,在这里“资源”就是邮件服务器。其类层次结构为javax.mail.Authenticator。
6)Store类。用来从邮件服务器上接受邮件,其类层次结构为javax.mail.Store。
7)Folder类。邮件文件夹类,它的类层次结构为javax.mail.Folder。
实现过程:
%@ page import="java.io.*"%
%@ page import="java.util.*"%
%@ page import="javax.mail.*"%
%@ page import="javax.mail.internet.*"%
%@ page import="javax.activation.*"%
%
try{
request.setCharacterEncoding("gb2312");
String from = request.getParameter("jname");
String to = request.getParameter("sname");
String subject = request.getParameter("title");
String messageText = request.getParameter("message");
String password = request.getParameter("password");
String S = request.getParameter("jname");
int n = S.indexOf('@');
int m = S.length();
String server = S.substring(n+1,m);
//建立邮件会话
Properties pro = new Properties();
pro.put("mail.smtp.host","smtp."+server);
pro.put("mail.stmp.auth","true");
Session sess = Session.getInstance(pro);
sess.setDebug(true);
MimeMessage message = new MimeMessage(mess);//新建一个消息对象
//设置发件人
InternetAddress from_mail = new InternetAddress(from);
message.setFrom(from_mail);
//设置收件人
InternetAddress to_mail = new InternetAddress(to);
message.setRecipient(Message.RecipientType.TO,to_mail);
message.setSubject(subject);//设置主题
message.setText(messageText);//设置内容
message.setSentDate(new Date());//设置发送时间
//发送邮件
message.saveChanges();//保存邮件信息
Transport transport = sess.getTransport("smtp");
transport.connect("smtp."+server,from,password);
transport.sendMessage(message,message.getAllRecipients());
transport.close();
out.print("邮件发送成功");
}catch(Exception e){
out.print("发送邮件失败,原因可能是ul");
out.println(e.getMessage());
}
%
2.发送HTML格式的邮件
MimeMultipart对象来存储HTML文件的具体内容,在设置内容的同时应该设置对象的格式。
MimeMultipart类的类层次结构是javax.mail.Internet.MimeMultipart。一般保存电子邮件内容的容器是Multipart抽象类,它定义了增加、删除及获得电子邮件不同内容的方法。由于Multipart是抽象类,所以必须使用一个具体的子类,JavaMail API提供javax.mail.Internet.MimeMultipart类来使用MimeMessage对象。
语法:
Multipart mul = new MimeMultipart();
说明:使用MimeMultipart对象时常用的一个方法是addBodyPart(),它可以在电子邮件的内容里添加BodyPart对象,消息可以有很多部分,一个BodyPart可以代表一个部分。
MimeBodyPart类的类层次结构是javax.mail.Internet.MimeBodyPart。MimeBodyPart是BodyPart具体于MimeMessage的一个子类。MimeBodyPart对象代表一个MimeMessage对象内容的一部分,每个MimeBodyPart被认为由两部分组成:一个MIME类型和匹配这个类型的内容。
语法:
BodyPart mdp = new MimeBodyPart();//新建一个存放信件内容的BodyPart对象
String messageText = "Hello World!";
//定义MIME类型为text/html,并设置MimeBodyPart的内容
mdp.setContent(messageText,"text/html");
实现过程:
%@ page import="java.io.*"%
%@ page import="java.util.*"%
%@ page import="javax.mail.*"%
%@ page import="javax.mail.internet.*"%
%@ page import="javax.activation.*"%
%
try{
request.setCharacterEncoding("gb2312");
String from_mail = request.getParameter("sname");
String to_mail = request.getParameter("rname");
String subject = request.getParameter("title");
String messageText = request.getParameter("message");
String password = request.getParameter("password");
String S = request.getParameter("sname");
int n = S.indexOf('@');
int m = S.length();
String server = S.substring(n+1,m);
Properties prop = new Properties();
prop.put("mail.smtp.host","smtp."+server);
prop.put("mail.smtp.auth","true");
Session sess = Session.getInstance(prop);
sess.setDebug(true);
MimeMessage message = new MimeMessage(sess);
//给消息对象设置收件人、发件人、主题、发信时间
InternetAddress from = new InternetAddress(from_mail);
message.setFrom(from);
InternetAddress to = new InternetAddress(to_mail);
message.setRecipient(Message.RecipientType.TO,to);
message.setSubject(subject);
message.setSentDate(new Date());
Multipart mul = new Multipart();//新建一个MimeMultipart对象来存放多个BodyPart对象
BodyPart mdp = new MimeBodyPart();//新建一个存放信件内容的BodyPart对象
mdp.setContent(messageText,"text/html;charset=gb2312");
mul.addBodyPart(mdp);//将含有信件内容的BodyPart加入到MimeMultipart对象中
message.saveChanges();
Transport transport = sess.getTransport("smtp");
transport.connect("smtp."+server,from_mail,password);
transport.sendMessage(message,message.getAllRecipients());
transport.close();
out.println("邮件发送成功!");
}catch(Exception e){
out.print("发送邮件失败,原因可能是ul");
out.println(e.getMessage());
}
%
3.带附件的邮件发送
一般,在设计带有附件的邮件发送程序时可以遵循以下步骤:
1)发送带有附件的邮件需要建立邮件的各个邮件体部分,在第一个部分(即邮件内容文字)后增加一个具有DataHandler的附件。
2)如果将文件作为附件发送,则要建立FileDataSource类型的对象作为附件数据源;如果从URL读取数据作为附件发送,则要建立URLDataSource类型的对象作为附件数据源。
3)将数据源(FileDataSource或是URLDataSource)对象作为DataHandler类的构造方法的参数传入,从而建立一个DataHandler对象作为数据源的DataHandler。
4)将这个DataHandler设置为邮件体部分的DataHandler,这样就完成了邮件体与附件之间的关联工作。下面的工作就是用BodyPart的setFileName()方法设置附件名为原文件名。
5)将两个邮件体放入到Multipart,设置邮件内容为这个容器的Multipart,发送邮件。
实现过程:
%@ page import="java.io.*"%
%@ page import="java.util.*"%
%@ page import="javax.mail.*"%
%@ page import="javax.mail.internet.*"%
%@ page import="javax.activation.*"%
%@ page import="java.net.*"%
%
try{
request.setCharacterEncoding("gb2312");
String from_mail = request.getParameter("sname");
Stirng to_mail = request.getParameter("rname");
String from_psd = request.getParameter("password");
String title = request.getParameter("title");
String content = request.getParameter("content");
String path = request.getParameter("attachement");
String S = request.getParameter("sname");
int n = S.indexOf('@');
int m = S.length();
String server = S.substring(n+1,m);
Properties prop = new Properties();
prop.put("mail.smtp.host","smtp."+server);
prop.put("mail.smtp.auth","true");
Session sess = Session.getInstance(prop);
session.setDebug(true);
MimeMessage message = new MimeMessage(sess);
//给消息对象设置收件人、发件人、主题
InternetAddress from = new InternetAddress(from_mail);
message.setFrom(from);
InternetAddress to = new InternetAddress(to_mail);
message.setRecipient(Message.RecipientType.TO,to);
message.setSubject(title);
Multipart mul = new MimeMultipart();//新建一个MimeMultipart对象来存放多个BodyPart对象
BodyPart mdp = new MimeBodyPart();//新建一个存放信件内容的BodyPart对象
mdp.setContent(content,"text/html;charset=gb2312");
mul.addBodyPart(mdp);//将含有信件内容的BodyPart加入到MimeMultipart对象中
//设置信件的附件
mdp = new MimeBodyPart();//新建一个存放附件的BodyPart
DataHandler handler = new DataHandler("JAVAMAIL附件测试","text/plain;charset=gb2312");//新建一个DataHandler对象,并设置其内容、格式和编码方式
mdp.setFileName("mrsoft");//可以和源文件名不一致
mdp.setDataHandler(handler);
mul.addBodyPart(mdp);
message.setContent(mul);//把mul作为消息对象的内容
message.saveChanges();
Transport transport = sess.getTransport("smtp");
transport.connect("smtp."+server,from_mail,from_psd);
transport.sendMessage(message,message.getAllRecipients());
transport.close();
out.println("附件发送成功!");
}catch(Exception ex){
out.print("邮件发送失败,原因可能是:ul");
out.println(ex.getMessage());
}
%
4.邮件群发
将收件人的地址设置为tomail+i的形式,利用For循环向这些地址发送邮件,以实现群发的目的。
利用Address类设置邮件信息的收件人和发件人信息,在创建了邮件地址类后,通过message的setFrom()方法设置邮件的发件人,代码如下:
message.setFrom(from_mail);
设置收件人地址时使用setRecipient()方法设置收信人地址,代码如下:
message.setRecipient(type,address);
参数type为收件人类型。可以使用以下3个常量来区分收件人的类型:
1)Message.RecipientType.TO--发送。
2)Message.RecipientType.CC--抄送。
3)Message.RecipientType.BCC--暗送。
说明:在日常的使用中,经常会用到抄送和暗送这两种形式的邮件发送。抄送和暗送虽然都是将一封E-mail同时发送到多个信箱,但是它们之
间有一定的区别的,其区别在于暗送隐藏了其他抄送人的地址,只让收信人看到自己的收信地址,可以起到保密和预防垃圾邮件的作用。
实现过程:
%@ page import="java.io.*"%
%@ page import="java.util.*"%
%@ page import="javax.mail.*"%
%@ page import="javax.mail.internet.*"%
%@ page import="javax.activation.*"%
%
try{
int i = 1;
for(i=1;i4;i++){
request.setCharacterEncoding("gb2312");
String from = request.getParameter("from_mail");
String to = request.getParameter("tomail"+i);
String subject = request.getParameter("subject");
String messageText = request.getParameter("message");
String password = request.getParameter("password");
String S = request.getParameter("from_mail");
int n = S.indexOf('@');
int m = S.length();
String server = S.substring(n+1,m);
//建立邮件会话
Properties pro = new Properties();
pro.put("mail.smtp.host","smtp."+server);
pro.put("mail.smtp.auth","true");
Session sess = Session.getInstance(pro);
sess.setDebug(true);
MimeMessage message = new MimeMessage(sess);//新建一个消息对象
InternetAddress from_mail = new InternetAddress(from);//设置发件人
message.setFrom(from_mail);
//设置收件人
InternetAddress to = new InternetAddress(to);
message.setRecipient(Message.RecipientType.TO,to_mail);
message.setSubject(subject);//设置主题
message.setText(messageText);//设置内容
message.setSentDate(new Date());//设置发送时间
message.saveChanges();//保存邮件信息
Transport transport = sess.getTransport("smtp");
transport.connect("smtp."+server,from,password);
transport.sendMessage(message,message.getAllRecipients());
transport.close();
if(i==3){
out.print("发送邮件成功");
}
}
}catch(Exception e){
out.print("发送邮件失败,原因可能是ul");
out.println(e.getMessage());
}
%
5.Spring利用WebService发送手机短信
通过编程实现短信息的发送是一件比较繁琐的事情,目前一般的解决方法是通过计算机和手机的连线,使用手机编程语言编写相关的短信程序,而这种方法不仅需要耗费时间和精力,还需要有相应的硬件设施,并且必须懂得手机编程的相关知识。可以通过Web Service技术远程访问现有的短信发送服务器,并通过调用服务器的方法来发送短信。
技术要点:
利用现有资源:一个可发送短信的Web Service远程服务。这个Web Service是新浪网站提供的,它可供用户直接调用远程服务来发送消息。这个服务的服务名称是SMSWS,服务端口是SMSWebServiceSoapPort。在这个远程服务中提供了一个发送短消息的方法sendXml()。此方法的定义如下:
public String sendXml(String carrier,String id,String password,String toMobile,String message,String msgtype)
功能:根据用户给定的参数发送短信到目标用户的手机中。
参数说明:
sendXml()方法中的6个参数均为String类型,sendXml()方法的返回值也是String类型。以下是sendXml()方法中的6个参数的具体说明。
1)carrier:运营商名称,具体使用时此参数并没有什么具体要求,即这里面可以随便输入,输入的字符串不会在对方手机中有任何显示。
2)id:在新浪网上注册的手机号。使用新浪服务发送手机短信时,需要在新浪网站上进行手机注册,注册网址为:。
3)password:在新浪网成功注册手机后,新浪网所反馈来的密码。
4)toMobile:对方接收短信的手机号码。
5)message:所要发送短消息的内容。
6)msgtype:发送短消息的类型,由于发送的不是彩信,所以输入Text。
调用sendXml()方法需在Spring中配置JaxRpcPortProxyFactoryBean的实例,然后定义包含此方法的接口,Spring会自动获得远程服务的接口。
实现过程:
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
SMSWebService sendSms = (SMSWebService)ac.getBean("helloWorldService");
String carrier = "lzwsky";
String id = userid.getText();
String password = passwordField.getText();
String toMobile = toMobileField.getText();
String message = messageField.getText();
String msgtype = "Text";
sendSms.sendXml(carrier,id,password,toMobile,message,msgtype);
如何用JAVA实现发送手机短信
1.通过移动或联通短信网关发送短信,这需要通信服务商给你开通短信端口,发送短信协议各个服务商都不一样,比如移动的是cmpp2,cmpp3等
2.第二种是通过硬件设备发送短信,这个需要你有专门的硬件设备,比如一个上网卡或者一个手机模块,通过调用com遵从一些协议发送短信
单纯靠写代码是无法发短信的,至少要有一个WEBSERVICE接口或者硬件接口。
java如何实现发送短信验证码功能?
1、创建一个Http的模拟请求工具类,然后写一个POST方法或者GET方法
/** * 文件说明 * @Description:扩展说明 * @Copyright: XXXX dreamtech.com.cn Inc. All right reserved * @Version: V6.0 */package com.demo.util; import java.io.IOException;import java.util.Map; import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.HttpException;import org.apache.commons.httpclient.SimpleHttpConnectionManager;import org.apache.commons.httpclient.methods.GetMethod;import org.apache.commons.httpclient.methods.PostMethod; /** * @Author: feizi * @Date: XXXX年XX月XX日 XX:XX:XX * @ModifyUser: feizi * @ModifyDate: XXXX年XX月XX日 XX:XX:XX * @Version:V6.0 */public class HttpRequestUtil { /** * HttpClient 模拟POST请求 * 方法说明 * @Discription:扩展说明 * @param url * @param params * @return String * @Author: feizi * @Date: XXXX年XX月XX日 XX:XX:XX * @ModifyUser:feizi * @ModifyDate: XXXX年XX月XX日 XX:XX:XX */ public static String postRequest(String url, MapString, String params) { //构造HttpClient的实例 HttpClient httpClient = new HttpClient(); //创建POST方法的实例 PostMethod postMethod = new PostMethod(url); //设置请求头信息 postMethod.setRequestHeader("Connection", "close"); //添加参数 for (Map.EntryString, String entry : params.entrySet()) { postMethod.addParameter(entry.getKey(), entry.getValue()); } //使用系统提供的默认的恢复策略,设置请求重试处理,用的是默认的重试处理:请求三次 httpClient.getParams().setBooleanParameter("http.protocol.expect-continue", false); //接收处理结果 String result = null; try { //执行Http Post请求 httpClient.executeMethod(postMethod); //返回处理结果 result = postMethod.getResponseBodyAsString(); } catch (HttpException e) { // 发生致命的异常,可能是协议不对或者返回的内容有问题 System.out.println("请检查输入的URL!"); e.printStackTrace(); } catch (IOException e) { // 发生网络异常 System.out.println("发生网络异常!"); e.printStackTrace(); } finally { //释放链接 postMethod.releaseConnection(); //关闭HttpClient实例 if (httpClient != null) { ((SimpleHttpConnectionManager) httpClient.getHttpConnectionManager()).shutdown(); httpClient = null; } } return result; } /** * HttpClient 模拟GET请求 * 方法说明 * @Discription:扩展说明 * @param url * @param params * @return String * @Author: feizi * @Date: XXXX年XX月XX日 XX:XX:XX * @ModifyUser:feizi * @ModifyDate: XXXX年XX月XX日 XX:XX:XX */ public static String getRequest(String url, MapString, String params) { //构造HttpClient实例 HttpClient client = new HttpClient(); //拼接参数 String paramStr = ""; for (String key : params.keySet()) { paramStr = paramStr + "" + key + "=" + params.get(key); } paramStr = paramStr.substring(1); //创建GET方法的实例 GetMethod method = new GetMethod(url + "?" + paramStr); //接收返回结果 String result = null; try { //执行HTTP GET方法请求 client.executeMethod(method); //返回处理结果 result = method.getResponseBodyAsString(); } catch (HttpException e) { // 发生致命的异常,可能是协议不对或者返回的内容有问题 System.out.println("请检查输入的URL!"); e.printStackTrace(); } catch (IOException e) { // 发生网络异常 System.out.println("发生网络异常!"); e.printStackTrace(); } finally { //释放链接 method.releaseConnection(); //关闭HttpClient实例 if (client != null) { ((SimpleHttpConnectionManager) client.getHttpConnectionManager()).shutdown(); client = null; } } return result; }}
2、在创建一个类,生成验证码,然后传递相应的参数(不同的短信平台接口会有不同的参数要求,这个一般短信平台提供的接口文档中都会有的,直接看文档然后按要求来即可)
/** * 文件说明 * @Description:扩展说明 * @Copyright: XXXX dreamtech.com.cn Inc. All right reserved * @Version: V6.0 */package com.demo.util; import java.net.URLEncoder;import java.util.HashMap;import java.util.Map; /** * @Author: feizi * @Date: XXXX年XX月XX日 XX:XX:XX * @ModifyUser: feizi * @ModifyDate: XXXX年XX月XX日 XX:XX:XX * @Version:V6.0 */public class SendMsgUtil { /** * 发送短信消息 * 方法说明 * @Discription:扩展说明 * @param phones * @param content * @return * @return String * @Author: feizi * @Date: 2015年4月17日 下午7:18:08 * @ModifyUser:feizi * @ModifyDate: 2015年4月17日 下午7:18:08 */ @SuppressWarnings("deprecation") public static String sendMsg(String phones,String content){ //短信接口URL提交地址 String url = "短信接口URL提交地址"; MapString, String params = new HashMapString, String(); params.put("zh", "用户账号"); params.put("mm", "用户密码"); params.put("dxlbid", "短信类别编号"); params.put("extno", "扩展编号"); //手机号码,多个号码使用英文逗号进行分割 params.put("hm", phones); //将短信内容进行URLEncoder编码 params.put("nr", URLEncoder.encode(content)); return HttpRequestUtil.getRequest(url, params); } /** * 随机生成6位随机验证码 * 方法说明 * @Discription:扩展说明 * @return * @return String * @Author: feizi * @Date: 2015年4月17日 下午7:19:02 * @ModifyUser:feizi * @ModifyDate: 2015年4月17日 下午7:19:02 */ public static String createRandomVcode(){ //验证码 String vcode = ""; for (int i = 0; i 6; i++) { vcode = vcode + (int)(Math.random() * 9); } return vcode; } /** * 测试 * 方法说明 * @Discription:扩展说明 * @param args * @return void * @Author: feizi * @Date: XXXX年XX月XX日 XX:XX:XX * @ModifyUser:feizi * @ModifyDate: XXXX年XX月XX日 XX:XX:XX */ public static void main(String[] args) {// System.out.println(SendMsgUtil.createRandomVcode());// System.out.println("ecb=12".substring(1)); System.out.println(sendMsg("18123456789,15123456789", "尊敬的用户,您的验证码为" + SendMsgUtil.createRandomVcode() + ",有效期为60秒,如有疑虑请详询XXX-XXX-XXXX【XXX中心】")); }
然后执行一下,一般的情况下参数传递正确,按照接口文档的规范来操作的话,都会发送成功的,手机都能收到验证码的,然后可能会出现的问题就是:发送的短信内容有可能会出现中文乱码,然后就会发送不成功,按照短信平台的要求进行相应的编码即可。一般都会是UTF-8编码。
java怎么实现群发短信的功能
JAVA实现短信群发的步骤:
1、使用第三方短信平台服务商,接入短信服务;
2、调用短信提交页面发送请求;
3、服务器向第三方短信平台提交发送请求;
4、短信平台通过运营商将短信下发至用户的手机上。
以下是秒赛短信平台JAVA短信验证码接口代码示例
package test;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URISyntaxException;
import java.net.URLEncoder;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.lang3.StringUtils;
public class Apis {
// 短信发送接口的http地址,请咨询客服
private static String url = “xxxxxxxxxxxxxxxxxxxxxxxxxxxx”;
// 编码格式。发送编码格式统一用UTF-8
private static String ENCODING = “UTF-8”;
public static void main(String[] args) throws IOException, URISyntaxException {
// 账号
String account = “************************”;
// 密码
String pswd = “************************”;
// 修改为您要发送的手机号,多个用,分割
String mobile = “13*********”;
// 设置您要发送的内容
String msg = “【秒赛科技】您的验证码是:1234”;
// 发短信调用示例
System.out.println(Apis.send(account,pswd, mobile, msg));
}
/**
* 发送短信
*
* @param account
* account
* @param pswd
* pswd
* @param mobile
* 手机号码
* @param content
* 短信发送内容
*/
public static String send(String account,String pswd, String mobile, String msg) {
NameValuePair[] data = { new NameValuePair(“account”, account),
new NameValuePair(“pswd”, pswd),
new NameValuePair(“mobile”, mobile),
new NameValuePair(“msg”, msg),
new NameValuePair(“needstatus”, “true”),
new NameValuePair(“product”, “”) };
return doPost(url, data);
}
/**
* 基于HttpClient的post函数
* PH
* @param url
* 提交的URL
*
* @param data
* 提交NameValuePair参数
* @return 提交响应
*/
private static String doPost(String url, NameValuePair[] data) {
HttpClient client = new HttpClient();
PostMethod method = new PostMethod(url);
// method.setRequestHeader(“ContentType”,
// “application/x-www-form-urlencoded;charset=UTF-8”);
method.setRequestBody(data);
// client.getParams()。setContentCharset(“UTF-8”);
client.getParams()。setConnectionManagerTimeout(10000);
try {
client.executeMethod(method);
return method.getResponseBodyAsString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
如何用Java实现短信自动发送功能
方法一:
1.web.xml中配置listener
listener
listener-class
cn.com.jxlife.shs.web.action.csinquiry.surrender.MyListener
/listener-class
/listener
2.创建listener
import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class MyListener implements ServletContextListener {
private Timer timer = null;
@Override
public void contextInitialized(ServletContextEvent sce) {
timer = new Timer(true);
//设置任务计划,启动和间隔时间
timer.schedule(new MyTask(), 0, 3*60*1000);
//3分钟
//timer.schedule(new MyTask(), 0, 3*60*1000);
//在1秒后执行此任务,每次间隔2秒
//timer.schedule(new MyTask(), 1000, 2000);
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
timer.cancel();
}
}
3.创建启动的类MyTask
import java.util.Date;
import java.util.TimerTask;
public class MyTask extends TimerTask {
@Override
public void run() {
System.out.println("call at " + (new Date()));
}
}
方法二:
spring 下实现定时工作的调度框架quartz
· 1。从下载quartz的开源包
quartz-1.7.3.tar.gz
3.07M
· 2。从quartz-1.7.3.tar.gz 找到quartz-1.7.3.jar,放到项目的classpath下
(放到webroot/WEB-INF/lib)下
· 3。定义一个需要时间调度的程序
package com.machome.quartz;
public class CustomJob1 {
public void onTimeWork() {
System.out.println("数据备份任务启动");
System.out.println("...");
System.out.println("数据备份任务完成");
}
}
· 4。剩余的工作就都在spring xml文件里完成了
!-- 被调度的bean --
bean id="job1" class="com.machome.quartz.CustomJob1"/bean
!-- 定义任务对象 --
bean id="jobtask1"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
!-- 被调度的bean --
property name="targetObject"
ref bean="job1" /
/property
!-- 被调度的bean中的被调度的方法 --
property name="targetMethod"
valueonTimeWork/value
/property
/bean
!-- 定义触发对象 --
bean id="trigger1"
class="org.springframework.scheduling.quartz.CronTriggerBean"
!-- 任务对象 --
property name="jobDetail"
ref bean="jobtask1" /
/property
!-- cron表达式 --
property name="cronExpression"
value10,15,20,25,30,35,40,45,50,55 * * * * ?/value
/property
/bean
!-- 调度对象 --
!-- 如果将lazy-init='false'那么容器启动就会执行调度程序 --
bean id="scheduler" lazy-init="false"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean"
!-- 触发对象 --
property name="triggers"
list
ref bean="trigger1" /
/list
/property
/bean
· 5。 将spring 项目部署到TOMCAT或JBOSS服务器上
deploy项目
重启TOMCAT server
· 6。看结果:
cron表达式参考:Quartz的cron表达式