加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 07:15:32 所属栏目:Java 来源:网络整理
导读:Spring相关的依赖导入进去,即可使用spring的定时任务! !-- spring核心包 -- dependency groupId org.springframework / artifactId spring-test version 4.3.13.RELEASE spring-webmvc spring-core spring-aop ? 定时任务是开发中常用的,比如订单查询,一

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

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

?

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

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

首先准备邮件的依赖:

    
         发邮件 -->            
        >com.sun.mail>javax.mail>1.5.2scope>provided>

?

邮件工具类:

import java.util.Properties;
 javax.mail.Authenticator;
 javax.mail.Message;
 javax.mail.MessagingException;
 javax.mail.PasswordAuthentication;
 javax.mail.Session;
 javax.mail.Transport;
 javax.mail.internet.AddressException;
 javax.mail.internet.InternetAddress;
 javax.mail.internet.MimeMessage;
 javax.mail.internet.MimeMessage.RecipientType;

public class MailUtils {

    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 =  Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("123@163.com","123");
            }
        };

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

         2.创建一个Message,它相当于是邮件内容
        Message message =  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;  
  
 java.io.InputStream;  
 java.net.URL;  
 java.net.URLConnection;

 javax.mail.internet.AddressException;

 cn.pms.util.MailUtils;  
  
 MonitorUrl {  
 

      
    void testUrlWithTimeOut2016(String urlString,int timeOutMillSeconds){  
        long lo = System.currentTimeMillis();  
        URL url;    
        try {    
             url =  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);  
    }  
    
    void testUrlWithTimeOut2018(String urlString,1)">;    
             emailMonitor2018();
        }    
        System.out.println(System.currentTimeMillis()-void testUrlWithTimeOut1818(String urlString,1)">;    
             emailMonitor1818();;
        }    
        System.out.println(System.currentTimeMillis()-void testUrlWithTimeOut1616(String urlString,1)">;    
             emailMonitor1616();
        }    
        System.out.println(System.currentTimeMillis()-lo);  
    }  

    
     emailMonitor2016() {
         {
            MailUtils.sendMail("123@qq.com","tomcat服务器端口为2016宕机了");
        }  (AddressException e) {
             TODO Auto-generated catch block
            e.printStackTrace();
        }  (MessagingException e) {
                        e.printStackTrace();
        }
    }
    
     emailMonitor2018() {
         emailMonitor1818() {
         {
            MailUtils.sendMail("1236@qq.com","tomcat服务器端口为1818宕机了" emailMonitor1616() {
                    e.printStackTrace();
        }
    }
}  

?

具体定时任务类:


@Component
 QuartzJob {
    
private static Logger logger = Logger.getLogger(QuartzJob.);
    

    
    @Scheduled(cron = "0 0/1 * * * ? ")
     test() {
        MonitorUrl.testUrlWithTimeOut2018("http://www.yc520.com:2018/",2000);

        MonitorUrl.testUrlWithTimeOut1616("http://www.yc520.com:1616/",1)">);
        logger.info("每分钟执行" + System.currentTimeMillis());
    }
    
    @Scheduled(cron = "0 10 0 * * ?" monitorServerTest() {
        
        System.out.println("每10分钟监控一次2018服务器和1616服务器");
        MonitorUrl.testUrlWithTimeOut2018("http://www.yc520.com:2018/",1)">);
        MonitorUrl.testUrlWithTimeOut1616("http://www.yc520.com:1616/",1)">);
    }
    
    @Scheduled(cron="0 30 0 * * ?" monitorServer() {
        System.out.println("每30分钟监控一次1818测试服务器");
        MonitorUrl.testUrlWithTimeOut1818("http://www.yc520:1818/",1)">);
    }

}

?

由此就可以达到监控服务器的目的,当然这只是小试牛刀,而且也不够全面,当然也存在问题,如果是每分钟定时任务检测,突然一台服务器挂了,那么将会源源不断的发送邮件,163邮件是有限的,而且频繁的可能会被当成垃圾邮件,我只需要知道一条信息,某某服务器宕机了,一遍就可以,最后给我发三十遍,如此的话,大量的无效邮件很浪费资源,而且浪费时间。所以说,本文只是一个服务器监控小示例,实际开发中,切勿直接拿来用,最好要有相关的判断和逻辑。这样才能比较高效,达到预期期望。

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读