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

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

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

(0)

相关推荐

  • springboot集成schedule实现定时任务

    背景 在项目开发过程中,我们经常需要执行具有周期性的任务.通过定时任务可以很好的帮助我们实现. 我们拿常用的几种定时任务框架做一个比较: 从以上表格可以看出,Spring Schedule框架功能完善,简单易用.对于中小型项目需求,Spring Schedule是完全可以胜任的. 1.springboot集成schedule 1.1 添加maven依赖包 由于Spring Schedule包含在spring-boot-starter基础模块中了,所有不需要增加额外的依赖. <dependenci

  • 详解SpringBoot 创建定时任务(配合数据库动态执行)

    序言:创建定时任务非常简单,主要有两种创建方式:一.基于注解(@Scheduled) 二.基于接口(SchedulingConfigurer). 前者相信大家都很熟悉,但是实际使用中我们往往想从数据库中读取指定时间来动态执行定时任务,这时候基于接口的定时任务就大派用场了. 一.静态定时任务(基于注解) 基于注解来创建定时任务非常简单,只需几行代码便可完成. @Scheduled 除了支持灵活的参数表达式cron之外,还支持简单的延时操作,例如 fixedDelay ,fixedRate 填写相应

  • 详解Spring整合Quartz实现动态定时任务

    最近项目中需要用到定时任务的功能,虽然spring 也自带了一个轻量级的定时任务实现,但感觉不够灵活,功能也不够强大.在考虑之后,决定整合更为专业的Quartz来实现定时任务功能. 普通定时任务 首先,当然是添加依赖的jar文件,我的项目是maven管理的,以下的我项目的依赖: <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring

  • Springboot整个Quartz实现动态定时任务的示例代码

    简介 Quartz是一款功能强大的任务调度器,可以实现较为复杂的调度功能,如每月一号执行.每天凌晨执行.每周五执行等等,还支持分布式调度.本文使用Springboot+Mybatis+Quartz实现对定时任务的增.删.改.查.启用.停用等功能.并把定时任务持久化到数据库以及支持集群. Quartz的3个基本要素 Scheduler:调度器.所有的调度都是由它控制. Trigger: 触发器.决定什么时候来执行任务. JobDetail & Job: JobDetail定义的是任务数据,而真正的

  • 详解Spring Boot Admin监控服务上下线邮件通知

    本文介绍了Spring Boot Admin监控服务上下线邮件通知,分享给大家,具体如下: 微服务架构下,服务的数量少则几十,多则上百,对服务的监控必不可少. 如果是以前的单体项目,启动了几个项目是固定的,可以通过第三方的监控工具对其进行监控,然后实时告警. 在微服务下,服务数量太多,并且可以随时扩展,这个时候第三方的监控功能就不适用了,我们可以通过Spring Boot Admin连接注册中心来查看服务状态,这个只能在页面查看. 很多时候更希望能够自动监控,通过邮件告警,某某服务下线了这样的功

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

    Spring相关的依赖导入进去,即可使用spring的定时任务! <!-- spring核心包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>4.3.13.RELEASE</version> </dependency> <dependen

  • spring定时任务执行两次及tomcat部署缓慢问题的解决方法

    一.spring定时任务执行两次 问题重现和解析 最近使用quartz定时任务框架,结果发现开发环境执行无任何问题,部署到服务器上后,发现同一时间任务执行了多次.经过搜索发现是服务器上tomcat的配置文件出现了问题. 原来的配置文件--server.xml如下: <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">

  • 使用Spring的JAVA Mail支持简化邮件发送功能

    闲来无事,翻看<Spring in Action>,发现Spring集成了对JAVA Mail的支持,有点小激动的看了一遍,嗯,话说真的简单了很多. Spring的邮件发送的核心是MailSender接口,在Spring3.0中提供了一个实现类JavaMailSenderImpl,这个类是发送邮件的核心类.可以通过在配置文件中配置使用,当然也可以自己硬编码到代码中(方便起见,下面的演示代码都是硬编码到代码中,省得配置麻烦). Spring提供的邮件发送不仅支持简单邮件的发送.添加附件,而且还可

  • spring定时任务(scheduler)的串行、并行执行实现解析

    对于spring的定时任务,最近有接触过一些,对于串行和并行也学习了一下,现在这里做下记录. 我是把每个定时任务分别写在不同的类中的,即一个类就是一个定时任务,然后在spring配置文件中进行配置,首先说串行任务的配置.如下: 1.串行 <task:scheduled-tasks> <task:scheduled ref="className1" method="methodName1" cron="0 0/5 * * * ?"

  • Spring定时任务轮询本地数据库实现过程解析

    这篇文章主要介绍了Spring定时任务轮询本地数据库实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 要做的东西很莫名其妙 可以说是数据互通的一个接口吧 当本地有表单提交后 处理一下数据 发送给另一个公司的接口 在表单提交的存库的controller里 直接处理数据 封装 并发送就完事了 . 然而领导叫我写一个接口...接收数据 处理 并发送. 到最后又改成用触发器的方式 然而写触发器的并不会用它发送http请求 我只能用Spring

  • Spring Boot利用Java Mail实现邮件发送

    本文实例为大家分享了Spring Boot利用Java Mail实现邮件发送的具体代码,供大家参考,具体内容如下 实现邮件发送的方法有很多,这里只是简单记录一个demo实现 1. 引入maven依赖 <!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support --> <dependency> <groupId>org.springframework</grou

  • Java spring定时任务详解

    目录 一.定时任务 1.cron表达式 2.cron示例 3.SpringBoot整合 总结 一.定时任务 1.cron表达式 语法:秒 分 时 日 月 周 年 (其中"年"Spring不支持,也就是说在spring定时任务中只能设置:秒 分 时 日 月 周) 2.cron示例 3.SpringBoot整合 @EnableScheduling @Scheduled 实例: package com.xunqi.gulimall.seckill.scheduled; import lomb

  • 基于Spring定时任务的fixedRate和fixedDelay的区别

    目录 Spring定时任务的fixedRate和fixedDelay区别 定时任务fixedRate和fixedDelay区别最简单的解释 Spring定时任务的fixedRate和fixedDelay区别 用过 Spring 的 @EnableScheduling 的都知道,我们用三种形式来部署计划任务,即 @Scheduled 注解的 fixedRate(fixedRateString), fixedDelay(fixedDelayString), 以及 cron. cron 不在这里讨论的

  • Spring定时任务无故停止又不报错的解决

    目录 Spring定时任务无故停止又不报错 解决方案 Spring定时任务跑完不再启动 spring的定时任务有以下两个特性 排查方式 解决思路 Spring定时任务无故停止又不报错 一开始是使用Spring自带的定时器来配置定时任务的,简单快捷,配置如下: <bean id="refreshCache" class="com.gionee.baserom.search.job.RefreshCache" /> <task:scheduled-ta

  • java中 spring 定时任务 实现代码

    复制代码 代码如下: import org.apache.log4j.*;public class TaskJob {       public static Logger log = Logger                     .getLogger(TaskJob.class);       public void SayHello() {              // TODO Auto-generated method stub              try {      

随机推荐