Spring定时任务使用和如何使用邮件监控服务器
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邮件是有限的,而且频繁的可能会被当成垃圾邮件,我只需要知道一条信息,某某服务器宕机了,一遍就可以,最后给我发三十遍,如此的话,大量的无效邮件很浪费资源,而且浪费时间。所以说,本文只是一个服务器监控小示例,实际开发中,切勿直接拿来用,最好要有相关的判断和逻辑。这样才能比较高效,达到预期期望。 ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Slow Server? This is the Flow Chart You're Looking
- Java压缩和解压文件工具类ZipUtil
- java – Hibernate不会将正确的浮点数写入MS SQL 2005数据库
- java – Jersey客户端/ JAX-RS和可选(不是默认)@QueryParam
- Java:如何以编程方式确定数据集不遵循正态分布?
- java – 了解Streams API的ForEachTask中的主循环
- Spring getBeanDefinitionNames方法:获取JavaBean名称
- java – 如何为runnable jar添加jvm参数?
- Android设备唯一标识ID的获取
- Java Swing – JPanel和GridLayout边距/填充