首页 > 编程 > Java > 正文

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

2019-11-26 08:47:23
字体:
来源:转载
供稿:网友

Spring相关的依赖导入进去,即可使用spring的定时任务!

<!-- spring核心包 -->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-test</artifactId>      <version>4.3.13.RELEASE</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-webmvc</artifactId>      <version>4.3.13.RELEASE</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-core</artifactId>      <version>4.3.13.RELEASE</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-aop</artifactId>      <version>4.3.13.RELEASE</version>    </dependency>

定时任务是开发中常用的,比如订单查询,一位客人订购的某个东西,但是尚未支付,超过订单时效期自动失效,那么又是怎么样知道订单的时效性过呢?定时任务,可以每分钟或者每秒钟进行查询。

定时任务的应用是非常广的,下面应用下监控服务器,虽然说现在开源监控软件挺多的,什么zabbix,nagios或者其他等等。下面我将使用代码监控服务器:

首先准备邮件的依赖:

<!-- 发邮件 -->          <dependency>      <groupId>com.sun.mail</groupId>      <artifactId>javax.mail</artifactId>      <version>1.5.2</version>      <scope>provided</scope>    </dependency>

邮件工具类:

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();    }  }}

具体定时任务类:

@Componentpublic 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邮件是有限的,而且频繁的可能会被当成垃圾邮件,我只需要知道一条信息,某某服务器宕机了,一遍就可以,最后给我发三十遍,如此的话,大量的无效邮件很浪费资源,而且浪费时间。

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

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表