博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java定时任务监控_Spring定时任务使用及如何使用邮件监控服务器
阅读量:1543 次
发布时间:2019-04-21

本文共 5961 字,大约阅读时间需要 19 分钟。

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 e) {

// 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://www.yc520.com:2018/", 2000);

MonitorUrl.testUrlWithTimeOut1616("http://www.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://www.yc520.com:2018/", 2000);

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

}

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

public void monitorServer() {

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

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

}

}

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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

转载地址:http://kerdy.baihongyu.com/

你可能感兴趣的文章
LAMP架构六( Apache虚拟主机)
查看>>
LAMP架构七( Apache用户认证)
查看>>
LAMP架构八( Apache域名跳转301)
查看>>
线上测试bug工具
查看>>
无法获取签名信息,请上传有效包(110506)
查看>>
【APICloud系列|10】最新苹果APP上架App Store流程(超详细)
查看>>
【APICloud系列|11】使用APPuploader申请ios开发证书及ios发布证书教程
查看>>
【APICloud系列|12】ios真机调试时如何添加新设备的udid?
查看>>
前端开发必备的1个CSS框架
查看>>
【APICloud系列|13】移动端适配通揽
查看>>
常用的视频下载网站
查看>>
问题:三元向量的比较
查看>>
C++ 在屏幕上用星号打印菱形
查看>>
使用微信开发者工具添加小程序底部导航栏报错
查看>>
Android killer软件闪退的解决办法?
查看>>
eclipse中在类saolei.Test 中找不到main方法
查看>>
安卓车机没有ADB调试,任意安装第三方软件教程
查看>>
某小型校园网规划与设计要点(课程报告)
查看>>
前端页面通过web3.eth.accounts无法获取账户信息
查看>>
解决 invalid input detected at ‘^’ marker的问题
查看>>