Spring定时任务使用及如何使用邮件监控服务器

网友投稿 289 2023-01-01


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

邮件工具类:

import java.util.Properties;

import javax.mail.Authenticator;

import javax.mail.Message;

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 javax.mail.internet.MimeMessage.RecipientType;

public class MailUtils {

public static void sendMail(String email, String emailMsg)

throws AddressException, MessagingException {

// 1.创建一个程序与邮件服务器会话对象 Session

Properties props = new Properties();

props.setProperty("mail.transport.protocol", "SMTP");

props.setProperty("mail.host", "smtp.163.com");

props.setProperty("mail.smtp.auth", "true");// 指定验证为true

// 创建验证器

Authenticator auth = new Authenticator() {

public PasswordAuthentication getPasswordAuthentication() {

return new PasswordAuthentication("123@163.com", "123");

}

};

Session session = Session.getInstance(props, auth);

// 2.创建一个Message,它相当于是邮件内容

Message message = new MimeMessage(session);

message.setFrom(new InternetAddress("123@163.com")); // 设置发送者

message.setRecipient(RecipientType.TO, new InternetAddress(email)); // 设置发送方式与接收者

message.setSubject("邮件告警");

message.setContent(emailMsg, "text/html;charset=utf-8");

// 3.创建 Transport用于将邮件发送

Transport.send(message);

}

}

监控服务器类:

package cn.pms.monitor;

import java.io.InputStream;

import java.net.URL;

import java.net.URLConnection;

import javax.mail.MessagingException;

import javax.mail.internet.AddressException;

import cn.pms.util.MailUtils;

public class MonitorUrl {

public static void testUrlWithTimeOut2016(String urlString,int timeOutMillSeconds){

long lo = System.currentTimeMillis();

URL url;

try {

url = new URL(urlString);

URLConnection co = url.openConnection();

co.setConnectTimeout(timeOutMillSeconds);

co.connect();

System.out.println("连接可用");

} catch (Exception e1) {

System.out.println("连接打不开!");

url = null;

emailMonitor2016();

}

System.out.println(System.currentTimeMillis()-lo);

}

public static void testUrlWithTimeOut2018(String urlString,int timeOutMillSeconds){

long lo = System.currentTimeMillis();

URL url;

try {

url = new URL(urlString);

URLConnection co = url.openConnection();

co.setConnectTimeout(timeOutMillSeconds);

co.connect();

System.out.println("连接可用");

} catch (Exception e1) {

System.out.println("连接打不开!");

url = null;

emailMonitor2018();

}

System.out.println(System.currentTimeMillis()-lo);

}

public static void testUrlWithTimeOut1818(String urlString,int timeOutMillSeconds){

long lo = System.currentTimeMillis();

URL url;

try {

url = new URL(urlString);

URLConnection co = url.openConnection();

co.setConnectTimeout(timeOutMillSeconds);

co.connect();

System.out.println("连接可用");

} catch (Exception e1) {

System.out.println("连接打不开!");

url = null;

emailMonitor1818();;

}

System.out.println(System.currentTimeMillis()-lo);

}

public static void testUrlWithTimeOut1616(String urlString,int timeOutMillSeconds){

long lo = System.currentTimeMillis();

URL url;

try {

url = new URL(urlString);

URLConnection co = url.openConnection();

co.setConnectTimeout(timeOutMillSeconds);

co.connect();

System.out.println("连接可用");

} catch (Exception e1) {

System.out.println("连接打不开!");

url = null;

emailMonitor1616();

}

System.out.println(System.currentTimeMillis()-lo);

}

public static void emailMonitor2016() {

try {

MailUtils.sendMail("123@qq.com", "tomcat服务器端口为2016宕机了");

} catch (AddressException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (MessagingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public static void emailMonitor2018() {

try {

MailUtils.sendMail("123@qq.com", "tomcat服务器端口为2018宕机了");

} catch (AddressException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (MessagingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public static void emailMonitor1818() {

try {

MailUtils.sendMail("1236@qq.com", "tomcat服务器端口为1818宕机了");

} catch (AddressException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (MessagingException eojBnwmbR) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public static void emailMonitor1616() {

try {

MailUtils.sendMail("123@qq.com", "tomcat服务器端口为1616宕机了");

} catch (AddressException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (MessagingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

具体定时任务类:

@Component

public class QuartzJob {

private static Logger logger = Logger.getLogger(QuartzJob.class);

@Scheduled(cron = "0 0/1 * * * ? ")

public void test() {

MonitorUrl.testUrlWithTimeOut2018("http://yc520.com:2018/", 2000);

MonitorUrl.testUrlWithTimeOut1616("http://yc520.com:1616/", 2000);

logger.info("每分钟执行" + System.currentTimeMillis());

}

@Scheduled(cron = "0 10 0 * * ?")

public void monitorServerTest() {

System.out.println("每10分钟监控一次2018服务器和1616服务器");

MonitorUrl.testUrlWithTimeOut2018("http://yc520.com:2018/", 2000);

MonitorUrl.testUrlWithTimeOut1616("http://yc520.com:1616/", 2000);

}

@Scheduled(cron="0 30 0 * * ?")

public void monitorServer() {

System.out.println("每30分钟监控一次1818测试服务器");

MonitorUrl.testUrlWithTimeOut1818("http://yc520:1818/", 2000);

}

}

由此就可以达到监控服务器的目的,当然这只是小试牛刀,而且也不够全面,当然也存在问题,如果是每分钟定时任务检测,突然一台服务器挂了,那么将会源源不断的发送邮件,163邮件是有限的,而且频繁的可能会被当成垃圾邮件,我只需要知道一条信息,某某服务器宕机了,一遍就可以,最后给我发三十遍,如此的话,大量的无效邮件很浪费资源,而且浪费时间。

所以说,本文只是一个服务器监控小示例,实际开发中,切勿直接拿来用,最好要有相关的判断和逻辑。这样才能比较高效,达到预期期望。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java 8新增的方法参数反射实例分析
下一篇:微服务网关消息分发(微服务网关集群)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~