Spring定时任务使用及如何使用邮件监控服务器
Spring相关的依赖导入进去,即可使用spring的定时任务!
org.springframework spring-test 4.3.13.RELEASE org.springframework spring-webmvc 4.3.13.RELEASE org.springframework spring-core 4.3.13.RELEASE org.springframework spring-aop 4.3.13.RELEASE
定时任务是开发中常用的,比如订单查询,一位客人订购的某个东西,但是尚未支付,超过订单时效期自动失效,那么又是怎么样知道订单的时效性过呢?定时任务,可以每分钟或者每秒钟进行查询。
定时任务的应用是非常广的,下面应用下监控服务器,虽然说现在开源监控软件挺多的,什么zabbix,nagios或者其他等等。下面我将使用代码监控服务器:
首先准备邮件的依赖:
com.sun.mail javax.mail 1.5.2 provided
邮件工具类:
importjava.util.Properties; importjavax.mail.Authenticator; importjavax.mail.Message; importjavax.mail.MessagingException; importjavax.mail.PasswordAuthentication; importjavax.mail.Session; importjavax.mail.Transport; importjavax.mail.internet.AddressException; importjavax.mail.internet.InternetAddress; importjavax.mail.internet.MimeMessage; importjavax.mail.internet.MimeMessage.RecipientType; publicclassMailUtils{ publicstaticvoidsendMail(Stringemail,StringemailMsg) throwsAddressException,MessagingException{ //1.创建一个程序与邮件服务器会话对象Session Propertiesprops=newProperties(); props.setProperty("mail.transport.protocol","SMTP"); props.setProperty("mail.host","smtp.163.com"); props.setProperty("mail.smtp.auth","true");//指定验证为true //创建验证器 Authenticatorauth=newAuthenticator(){ publicPasswordAuthenticationgetPasswordAuthentication(){ returnnewPasswordAuthentication("123@163.com","123"); } }; Sessionsession=Session.getInstance(props,auth); //2.创建一个Message,它相当于是邮件内容 Messagemessage=newMimeMessage(session); message.setFrom(newInternetAddress("123@163.com"));//设置发送者 message.setRecipient(RecipientType.TO,newInternetAddress(email));//设置发送方式与接收者 message.setSubject("邮件告警"); message.setContent(emailMsg,"text/html;charset=utf-8"); //3.创建Transport用于将邮件发送 Transport.send(message); } }
监控服务器类:
packagecn.pms.monitor; importjava.io.InputStream; importjava.net.URL; importjava.net.URLConnection; importjavax.mail.MessagingException; importjavax.mail.internet.AddressException; importcn.pms.util.MailUtils; publicclassMonitorUrl{ publicstaticvoidtestUrlWithTimeOut2016(StringurlString,inttimeOutMillSeconds){ longlo=System.currentTimeMillis(); URLurl; try{ url=newURL(urlString); URLConnectionco=url.openConnection(); co.setConnectTimeout(timeOutMillSeconds); co.connect(); System.out.println("连接可用"); }catch(Exceptione1){ System.out.println("连接打不开!"); url=null; emailMonitor2016(); } System.out.println(System.currentTimeMillis()-lo); } publicstaticvoidtestUrlWithTimeOut2018(StringurlString,inttimeOutMillSeconds){ longlo=System.currentTimeMillis(); URLurl; try{ url=newURL(urlString); URLConnectionco=url.openConnection(); co.setConnectTimeout(timeOutMillSeconds); co.connect(); System.out.println("连接可用"); }catch(Exceptione1){ System.out.println("连接打不开!"); url=null; emailMonitor2018(); } System.out.println(System.currentTimeMillis()-lo); } publicstaticvoidtestUrlWithTimeOut1818(StringurlString,inttimeOutMillSeconds){ longlo=System.currentTimeMillis(); URLurl; try{ url=newURL(urlString); URLConnectionco=url.openConnection(); co.setConnectTimeout(timeOutMillSeconds); co.connect(); System.out.println("连接可用"); }catch(Exceptione1){ System.out.println("连接打不开!"); url=null; emailMonitor1818();; } System.out.println(System.currentTimeMillis()-lo); } publicstaticvoidtestUrlWithTimeOut1616(StringurlString,inttimeOutMillSeconds){ longlo=System.currentTimeMillis(); URLurl; try{ url=newURL(urlString); URLConnectionco=url.openConnection(); co.setConnectTimeout(timeOutMillSeconds); co.connect(); System.out.println("连接可用"); }catch(Exceptione1){ System.out.println("连接打不开!"); url=null; emailMonitor1616(); } System.out.println(System.currentTimeMillis()-lo); } publicstaticvoidemailMonitor2016(){ try{ MailUtils.sendMail("123@qq.com","tomcat服务器端口为2016宕机了"); }catch(AddressExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(MessagingExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } publicstaticvoidemailMonitor2018(){ try{ MailUtils.sendMail("123@qq.com","tomcat服务器端口为2018宕机了"); }catch(AddressExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(MessagingExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } publicstaticvoidemailMonitor1818(){ try{ MailUtils.sendMail("1236@qq.com","tomcat服务器端口为1818宕机了"); }catch(AddressExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(MessagingExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } publicstaticvoidemailMonitor1616(){ try{ MailUtils.sendMail("123@qq.com","tomcat服务器端口为1616宕机了"); }catch(AddressExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(MessagingExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } }
具体定时任务类:
@Component publicclassQuartzJob{ privatestaticLoggerlogger=Logger.getLogger(QuartzJob.class); @Scheduled(cron="00/1***?") publicvoidtest(){ MonitorUrl.testUrlWithTimeOut2018("http://www.yc520.com:2018/",2000); MonitorUrl.testUrlWithTimeOut1616("http://www.yc520.com:1616/",2000); logger.info("每分钟执行"+System.currentTimeMillis()); } @Scheduled(cron="0100**?") publicvoidmonitorServerTest(){ System.out.println("每10分钟监控一次2018服务器和1616服务器"); MonitorUrl.testUrlWithTimeOut2018("http://www.yc520.com:2018/",2000); MonitorUrl.testUrlWithTimeOut1616("http://www.yc520.com:1616/",2000); } @Scheduled(cron="0300**?") publicvoidmonitorServer(){ System.out.println("每30分钟监控一次1818测试服务器"); MonitorUrl.testUrlWithTimeOut1818("http://www.yc520:1818/",2000); } }
由此就可以达到监控服务器的目的,当然这只是小试牛刀,而且也不够全面,当然也存在问题,如果是每分钟定时任务检测,突然一台服务器挂了,那么将会源源不断的发送邮件,163邮件是有限的,而且频繁的可能会被当成垃圾邮件,我只需要知道一条信息,某某服务器宕机了,一遍就可以,最后给我发三十遍,如此的话,大量的无效邮件很浪费资源,而且浪费时间。
所以说,本文只是一个服务器监控小示例,实际开发中,切勿直接拿来用,最好要有相关的判断和逻辑。这样才能比较高效,达到预期期望。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。