• 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邮件是有限的,而且频繁的可能会被当成垃圾邮件,我只需要知道一条信息,某某服务器宕机了,一遍就可以,最后给我发三十遍,如此的话,大量的无效邮件很浪费资源,而且浪费时间。所以说,本文只是一个服务器监控小示例,实际开发中,切勿直接拿来用,最好要有相关的判断和逻辑。这样才能比较高效,达到预期期望。

  • 相关阅读:
    Asp.Net中Word,Excel等office com组件操作权限的问题 ————转自rainpig2008
    正则表达式摘录
    html5 Canvas画图2:画线条
    彻底理解函数声明与函数表达式优先级问题
    javascript定义变量和优先级的问题
    html5 Canvas画图4:填充和渐变
    讨论下canvas画椭圆的方法
    html5 Canvas画图3:1像素线条模糊问题
    [推荐]实在受不了canvas的语法了!我要让他支持链式语法!
    html5 Canvas画图5:画曲线之arc
  • 原文地址:https://www.cnblogs.com/youcong/p/9037425.html
Copyright © 2020-2023  润新知