软件编程
位置:首页>> 软件编程>> java编程>> Spring定时任务使用及如何使用邮件监控服务器

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

作者:挑战者V  发布时间:2023-01-12 16:38:58 

标签:spring,定时,任务,邮件,监控,服务器

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

具体定时任务类:


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

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

来源:https://www.cnblogs.com/youcong/p/9037425.html

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com