Spring定时任务使用及如何使用邮件监控服务器
Spring相关的依赖导入进去,即可使用spring的定时任务!
org.springframework spring-test 4.3.13.RELEASE org.springframework spring-webmvc 4.3.13.RELEASE org.springframework spring-core 4.3.13.RELEASE org.springframework spring-aop 4.3.13.RELEASE
定时任务是开发中常用的,比如订单查询,一位客人订购的某个东西,但是尚未支付,超过订单时效期自动失效,那么又是怎么样知道订单的时效性过呢?定时任务,可以每分钟或者每秒钟进行查询。
定时任务的应用是非常广的,下面应用下监控服务器,虽然说现在开源监控软件挺多的,什么zabbix,nagios或者其他等等。下面我将使用代码监控服务器:
首先准备邮件的依赖:
com.sun.mail javax.mail 1.5.2 provided
邮件工具类:
importjava.util.Properties;
importjavax.mail.Authenticator;
importjavax.mail.Message;
importjavax.mail.MessagingException;
importjavax.mail.PasswordAuthentication;
importjavax.mail.Session;
importjavax.mail.Transport;
importjavax.mail.internet.AddressException;
importjavax.mail.internet.InternetAddress;
importjavax.mail.internet.MimeMessage;
importjavax.mail.internet.MimeMessage.RecipientType;
publicclassMailUtils{
publicstaticvoidsendMail(Stringemail,StringemailMsg)
throwsAddressException,MessagingException{
//1.创建一个程序与邮件服务器会话对象Session
Propertiesprops=newProperties();
props.setProperty("mail.transport.protocol","SMTP");
props.setProperty("mail.host","smtp.163.com");
props.setProperty("mail.smtp.auth","true");//指定验证为true
//创建验证器
Authenticatorauth=newAuthenticator(){
publicPasswordAuthenticationgetPasswordAuthentication(){
returnnewPasswordAuthentication("123@163.com","123");
}
};
Sessionsession=Session.getInstance(props,auth);
//2.创建一个Message,它相当于是邮件内容
Messagemessage=newMimeMessage(session);
message.setFrom(newInternetAddress("123@163.com"));//设置发送者
message.setRecipient(RecipientType.TO,newInternetAddress(email));//设置发送方式与接收者
message.setSubject("邮件告警");
message.setContent(emailMsg,"text/html;charset=utf-8");
//3.创建Transport用于将邮件发送
Transport.send(message);
}
}
监控服务器类:
packagecn.pms.monitor;
importjava.io.InputStream;
importjava.net.URL;
importjava.net.URLConnection;
importjavax.mail.MessagingException;
importjavax.mail.internet.AddressException;
importcn.pms.util.MailUtils;
publicclassMonitorUrl{
publicstaticvoidtestUrlWithTimeOut2016(StringurlString,inttimeOutMillSeconds){
longlo=System.currentTimeMillis();
URLurl;
try{
url=newURL(urlString);
URLConnectionco=url.openConnection();
co.setConnectTimeout(timeOutMillSeconds);
co.connect();
System.out.println("连接可用");
}catch(Exceptione1){
System.out.println("连接打不开!");
url=null;
emailMonitor2016();
}
System.out.println(System.currentTimeMillis()-lo);
}
publicstaticvoidtestUrlWithTimeOut2018(StringurlString,inttimeOutMillSeconds){
longlo=System.currentTimeMillis();
URLurl;
try{
url=newURL(urlString);
URLConnectionco=url.openConnection();
co.setConnectTimeout(timeOutMillSeconds);
co.connect();
System.out.println("连接可用");
}catch(Exceptione1){
System.out.println("连接打不开!");
url=null;
emailMonitor2018();
}
System.out.println(System.currentTimeMillis()-lo);
}
publicstaticvoidtestUrlWithTimeOut1818(StringurlString,inttimeOutMillSeconds){
longlo=System.currentTimeMillis();
URLurl;
try{
url=newURL(urlString);
URLConnectionco=url.openConnection();
co.setConnectTimeout(timeOutMillSeconds);
co.connect();
System.out.println("连接可用");
}catch(Exceptione1){
System.out.println("连接打不开!");
url=null;
emailMonitor1818();;
}
System.out.println(System.currentTimeMillis()-lo);
}
publicstaticvoidtestUrlWithTimeOut1616(StringurlString,inttimeOutMillSeconds){
longlo=System.currentTimeMillis();
URLurl;
try{
url=newURL(urlString);
URLConnectionco=url.openConnection();
co.setConnectTimeout(timeOutMillSeconds);
co.connect();
System.out.println("连接可用");
}catch(Exceptione1){
System.out.println("连接打不开!");
url=null;
emailMonitor1616();
}
System.out.println(System.currentTimeMillis()-lo);
}
publicstaticvoidemailMonitor2016(){
try{
MailUtils.sendMail("123@qq.com","tomcat服务器端口为2016宕机了");
}catch(AddressExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(MessagingExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
publicstaticvoidemailMonitor2018(){
try{
MailUtils.sendMail("123@qq.com","tomcat服务器端口为2018宕机了");
}catch(AddressExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(MessagingExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
publicstaticvoidemailMonitor1818(){
try{
MailUtils.sendMail("1236@qq.com","tomcat服务器端口为1818宕机了");
}catch(AddressExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(MessagingExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
publicstaticvoidemailMonitor1616(){
try{
MailUtils.sendMail("123@qq.com","tomcat服务器端口为1616宕机了");
}catch(AddressExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(MessagingExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
具体定时任务类:
@Component
publicclassQuartzJob{
privatestaticLoggerlogger=Logger.getLogger(QuartzJob.class);
@Scheduled(cron="00/1***?")
publicvoidtest(){
MonitorUrl.testUrlWithTimeOut2018("http://www.yc520.com:2018/",2000);
MonitorUrl.testUrlWithTimeOut1616("http://www.yc520.com:1616/",2000);
logger.info("每分钟执行"+System.currentTimeMillis());
}
@Scheduled(cron="0100**?")
publicvoidmonitorServerTest(){
System.out.println("每10分钟监控一次2018服务器和1616服务器");
MonitorUrl.testUrlWithTimeOut2018("http://www.yc520.com:2018/",2000);
MonitorUrl.testUrlWithTimeOut1616("http://www.yc520.com:1616/",2000);
}
@Scheduled(cron="0300**?")
publicvoidmonitorServer(){
System.out.println("每30分钟监控一次1818测试服务器");
MonitorUrl.testUrlWithTimeOut1818("http://www.yc520:1818/",2000);
}
}
由此就可以达到监控服务器的目的,当然这只是小试牛刀,而且也不够全面,当然也存在问题,如果是每分钟定时任务检测,突然一台服务器挂了,那么将会源源不断的发送邮件,163邮件是有限的,而且频繁的可能会被当成垃圾邮件,我只需要知道一条信息,某某服务器宕机了,一遍就可以,最后给我发三十遍,如此的话,大量的无效邮件很浪费资源,而且浪费时间。
所以说,本文只是一个服务器监控小示例,实际开发中,切勿直接拿来用,最好要有相关的判断和逻辑。这样才能比较高效,达到预期期望。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。