一个简单的机房温度预警

@Ta 2019-05-17 1079点击
今天本来在苦逼的苦逼的苦逼的啃重构,然后,同事说让我帮忙做个小工具,他负责的机房温度老是超标,自带的机房管理工具G掉了,让我帮忙写个温度超标发送邮件预警的小工具~。不多说了,代码如下:
import java.io.BufferedReader;
import java.io.FileReader;
import java.security.GeneralSecurityException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import java.util.Timer;
import java.util.TimerTask;
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.InternetAddress;
import javax.mail.internet.MimeMessage;

import com.sun.mail.util.MailSSLSocketFactory;

public class Test extends TimerTask {

public String getTemperature(String deviceid,String devpropid) {
String url = "jdbc:sqlserver://************:1433;databaseName=JitonData;user=**;password=**";// sa身份连接
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
try {
// Establish the connection.
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con = DriverManager.getConnection(url);
// Create and execute an SQL statement that returns some data.
String SQL = "select d.curvalue from devpropertyname d where d.deviceid='"+deviceid+"' and d.devpropid='"+devpropid+"'";
stmt = con.createStatement();
rs = stmt.executeQuery(SQL);
// Iterate through the data in the result set and display it.
while (rs.next()) {
return rs.getString(1);
}
}
catch (Exception e) {
e.printStackTrace();
}
finally {
if (rs != null)
try {
rs.close();
} catch (Exception e) {
}
if (stmt != null)
try {
stmt.close();
} catch (Exception e) {
}
if (con != null)
try {
con.close();
} catch (Exception e) {
}
}

return "";
}
@Override
public void run() {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss ");
System.out.println(dateFormat.format(new Date()) + ":检测温度开始");
String K2003=new Test().getTemperature("K2003","K2003001");
String K9601=new Test().getTemperature("K9601","K9601001");
System.out.println(dateFormat.format(new Date()) + "温度计温度:"+K2003);
System.out.println(dateFormat.format(new Date()) + "空调回风温度:"+K9601);
System.out.println(dateFormat.format(new Date()) + ":检测温度结束");
if(Double.parseDouble(K2003)>23.0){
try {
sendMail("温度计温度报警", "温度计实时温度为"+K2003+"空调回风温度为"+K9601);
} catch (GeneralSecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}
public String getInfo(String key){
  Properties properties = new Properties();
     // 使用InPutStream流读取properties文件
  try {
  BufferedReader bufferedReader = new BufferedReader(new FileReader("D:/config/config.properties"));
properties.load(bufferedReader);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
       // 获取key对应的value值
 return properties.getProperty(key);
}
public void sendMail(String title,String con) throws GeneralSecurityException{

// 收件人电子邮箱
        String to = getInfo("to");
     // 收件人电子邮箱
        String cs = getInfo("cs");
        // 发件人电子邮箱
        String from = getInfo("from");

        // 指定发送邮件的主机为 smtp.qq.com
        String host = getInfo("host");  //QQ 邮件服务器

        // 获取系统属性
        Properties properties = System.getProperties();

        // 设置邮件服务器
        properties.setProperty("mail.smtp.host", host);

        properties.put("mail.smtp.auth", "true");
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        properties.put("mail.smtp.ssl.enable", "true");
        properties.put("mail.smtp.ssl.socketFactory", sf);
        // 获取默认session对象
        Session session = Session.getDefaultInstance(properties,new Authenticator(){
            public PasswordAuthentication getPasswordAuthentication()
            {
                return new PasswordAuthentication(getInfo("name"),getInfo("passworld")); //发件人邮件用户名、密码
            }
        });

        try{
            // 创建默认的 MimeMessage 对象
            MimeMessage message = new MimeMessage(session);

            // Set From: 头部头字段
            message.setFrom(new InternetAddress(from));

            // Set To: 头部头字段
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            
            message.setRecipient(Message.RecipientType.CC, new InternetAddress(cs));
            
            // Set Subject: 头部头字段
            message.setSubject(title);

            // 设置消息体
            message.setText(con);
            // 发送消息
            Transport.send(message);
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss ");
     System.out.println(dateFormat.format(new Date()) + ":邮件发送成功");
        }catch (MessagingException mex) {
            mex.printStackTrace();
        }
}


public static void main(String[] args) {
Timer timer = new Timer();
long delay1 = 1000;
long period1 = 600 * 1000;
timer.schedule(new Test(), delay1, period1);
long delay2 = 1000;
long period2 = 3600 * 1000;
timer.schedule(new Test2(), delay2, period2);
}

}



------------------------------------------------------------------------------------------------------------
回复列表(4)
  • 1
    @Ta / 2019-05-17
    java,只懂一点点
    这是一条小尾巴,你们不必羡慕!
  • 2
    @Ta / 2019-05-17

    @hejianeng,表示看不懂
    小尾巴我就菜鸡一枚 https://76wp.cn奇乐网

  • 3
    @Ta / 2019-05-18
    我居然看懂了,运行结果
    console:
    Hello Word!
  • 4
    @Ta / 2019-05-21
    结果   代码运行错误
添加新回复
回复需要登录

[聊天-此处没有老虎] 寻梦xunm:<!-- markdown --> --以上来自灌水信息,…