Java 发送状态更改电子邮件

Java 发送状态更改电子邮件,java,multithreading,spring,email,spring-mvc,Java,Multithreading,Spring,Email,Spring Mvc,我有一个项目,目前只做方法,当我运行该网站。现在,我需要实现一个线程来检查数据库/网站的状态变化,以便在出现问题时发送邮件。我已经成功地将该功能添加到了给某人发送邮件中,并且知道如何执行此操作的逻辑。当我试图编写代码时,问题就出现了,我不知道如何去做(因为我不太了解后端,现在我负责这个项目) 逻辑是实现一个java线程(runnable),然后用新线程检查以前的颜色,如果它已经改变,则发送一封邮件(颜色是状态,例如绿色和红色)。什么是最容易理解和实现这一点的方法?我将写函数名,以便您了解我的功能

我有一个项目,目前只做方法,当我运行该网站。现在,我需要实现一个线程来检查数据库/网站的状态变化,以便在出现问题时发送邮件。我已经成功地将该功能添加到了给某人发送邮件中,并且知道如何执行此操作的逻辑。当我试图编写代码时,问题就出现了,我不知道如何去做(因为我不太了解后端,现在我负责这个项目)

逻辑是实现一个java线程(runnable),然后用新线程检查以前的颜色,如果它已经改变,则发送一封邮件(颜色是状态,例如绿色和红色)。什么是最容易理解和实现这一点的方法?我将写函数名,以便您了解我的功能

我已经被这个问题困扰了一个星期,不知道该怎么办。如果有任何帮助,我将不胜感激

类中用于更改颜色的对象的方法:

    public void setColour(List<Status> statusar, List<Category> subcategories) {
    for (int index = 0; index < subcategories.size(); index++) {
        if (this.statusColor.compareToIgnoreCase("red") != 0) {

            if ((((Status)statusar.get(index)).getStatusColor().compareToIgnoreCase("green") == 0)
                    && (this.priority < ((Category)subcategories.get(index)).getPriority())) {
                this.statusColor = "GREEN";
                this.priority = ((Category)subcategories.get(index)).getPriority();
            }

            if (((((Status)statusar.get(index)).getStatusColor().compareToIgnoreCase("red") == 0)
                    && (((Category)subcategories.get(index)).getPriority() == 2))
                    || ((((Status)statusar.get(index)).getStatusColor().compareToIgnoreCase("yellow") == 0)
                    && (this.priority <= ((Category)subcategories.get(index)).getPriority()))
                    || ((((Status)statusar.get(index)).getStatusColor().compareToIgnoreCase("yellow") == 0)
                    && (((Category)subcategories.get(index)).getPriority() == 3))) {
                this.statusColor = "YELLOW";
                this.priority = ((Category)subcategories.get(index)).getPriority();
            }

            if (((((Status)statusar.get(index)).getStatusColor().compareToIgnoreCase("red") == 0)
                    && (((Category)subcategories.get(index)).getPriority() == 3))
                    || ((((Status)statusar.get(index)).getStatusColor().compareToIgnoreCase("red") == 0)
                    && (this.priority <= ((Category)subcategories.get(index)).getPriority()))) {
                this.statusColor = "RED";
                this.priority = ((Category)subcategories.get(index)).getPriority();
            }
        }
    }
}
public void setcolor(列出statusar,列出子类别){
对于(int index=0;index&&(这个。优先顺序为了清楚起见,我想把它分解一下:你知道如何发送电子邮件和如何编码,对吗?你知道如何查询数据库中的状态更改,对吗?如果是这样,那么我不太明白你的问题,如果不是这样,那么你可能想更清楚地说明实际问题。哦,顺便说一句,
“…INTERVAL”之类的东西+days+“DAY”
,即仅将参数值附加到查询字符串中容易出现SQL注入,因此您要么希望将其更改为使用预编译语句,要么非常小心地确定位置和方式
listColorsOverDays()调用了
。您需要帮助的具体问题是什么?不,我不知道如何查询数据库中的状态更改,这可能吗?如果可能的话,那就太好了。正如我提到的,我不知道java与DB对话的部分,这就是为什么我只是从项目中复制并粘贴了方法,并想知道这些方法是否可以使用塞德
public List<Map<String, Object>> listColorsOverDays(String days, String categoryName) {
    String SQL_getColors = "SELECT COUNT(*) count,color FROM ( ";
    SQL_getColors += " SELECT CASE";
    SQL_getColors += " WHEN CAST(status.value AS DECIMAL) >= CAST(greenFrom AS DECIMAL) AND CAST(status.value AS DECIMAL) <= CAST(greenTo AS DECIMAL) THEN 'GREEN' ";
    SQL_getColors += " WHEN CAST(status.value AS DECIMAL) >= CAST(yellowFrom AS DECIMAL) AND CAST(status.value AS DECIMAL) <= CAST(yellowTo AS DECIMAL) THEN 'YELLOW' ";
    SQL_getColors += " ELSE 'RED' END AS color ";
    SQL_getColors += " FROM status INNER JOIN category ON status.idCategory = category.idCategory ";
    SQL_getColors += " INNER JOIN threshold ON category.idCategory = threshold.idCategory ";
    SQL_getColors += " WHERE status.timeStamp>DATE_SUB(NOW(), INTERVAL " + days + " DAY) ";

    SQL_getColors += " AND category.name = '"+categoryName+"'";

    SQL_getColors += " ) as p group by p.color";

    List<Map<String, Object>> colorList = null;
    try {
        colorList = getJdbcTemplate().queryForList(SQL_getColors);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return colorList;
}
public List<Map<String, Object>> getColorList(String days, String categoryName) {
    StatusDAO statusDao_i = (StatusDAO)this.context.getBean("statusDAO");
    List<Map<String, Object>> colorList = new ArrayList();
    try {
        colorList = statusDao_i.listColorsOverDays(days, categoryName);
    } catch (BadSqlGrammarException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return colorList;

}
public List<Status> getStatusList(Status status) {
    StatusDAO statusDao_i = (StatusDAO)this.context.getBean("statusDAO");
    status.setCategoryId(this.categoryService_i.getCategoryId(status.getCategoryName()));

    Timestamp fromTime = Timestamp.valueOf(status.getFromTime());
    Timestamp toTime = Timestamp.valueOf(status.getToTime());
    List<Status> statusList = new ArrayList();
    try {
        statusList = statusDao_i.getStatusesByTime(status, fromTime, toTime);
        status.setCategoryId(this.categoryService_i.getCategoryId(status.getCategoryName()));
    } catch (BadSqlGrammarException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return statusList;
}