package com.elong.ihotel.util;

import org.springframework.beans.factory.DisposableBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware; /**
* Created by zyp on 14-7-4.
*/
public class SpringWebContextHolder implements ApplicationContextAware, DisposableBean { private static ApplicationContext applicationContext = null; /**
* 取得存储在静态变量中的ApplicationContext.
*/
public static ApplicationContext getApplicationContext() { return applicationContext;
} /**
* 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型.
*/
@SuppressWarnings("unchecked")
public static <T> T getBean(String name) {
return (T) applicationContext.getBean(name);
} /**
* 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型.
*/
public static <T> T getBean(Class<T> requiredType) { return applicationContext.getBean(requiredType);
} /**
* 清除SpringWebContextHolder中的ApplicationContext为Null.
*/
public static void clearHolder() { applicationContext = null;
} /**
* 实现ApplicationContextAware接口, 注入Context到静态变量中.
*/
@Override
public void setApplicationContext(ApplicationContext applicationContext) {
SpringWebContextHolder.applicationContext = applicationContext;
} /**
* 实现DisposableBean接口, 在Context关闭时清理静态变量.
*/
@Override
public void destroy() throws Exception {
SpringWebContextHolder.clearHolder();
} }

service.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:oscache="http://www.springmodules.org/schema/oscache"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springmodules.org/schema/oscache http://www.springmodules.org/schema/cache/springmodules-oscache.xsd"> <context:property-placeholder
location="classpath:conf/custom/env/config.properties"
ignore-unresolvable="true" /> <!-- spring 线程池配置 start -->
<!-- 公用的线程池服务器,处理一些例如报警,写日志等的工作(线程池容量很小) -->
<bean id="commonThreadPoolExecutor"
class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="${commonThreadPoolExecutor.corePoolSize}" />
<property name="maxPoolSize" value="${commonThreadPoolExecutor.maxPoolSize}" />
<property name="keepAliveSeconds" value="${commonThreadPoolExecutor.keepAliveSeconds}" />
<property name="queueCapacity" value="${commonThreadPoolExecutor.queueCapacity}" />
</bean>
</beans>

config.properties:

#coomon thread pool
commonThreadPoolExecutor.corePoolSize=1
commonThreadPoolExecutor.maxPoolSize=2
commonThreadPoolExecutor.keepAliveSeconds=20
commonThreadPoolExecutor.queueCapacity=100

利用线程池异步的发送报警:

package com.elong.ihotel.util;

import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

import com.elong.common.util.log.model.AlarmEntity;
import com.elong.common.util.log.model.BaseAlarmEntityType;
import com.elong.ihotel.util.log.AlarmEntityType; /**
* Created by ggg on 2014/10/17.
*/
public class AlarmUtils { // 初始化线程池
private static ThreadPoolTaskExecutor threadPoolExecutor = (ThreadPoolTaskExecutor) SpringWebContextHolder
.getBean("commonThreadPoolExecutor");
/**
* 发送短信
*
* @title 发送报警短信方法,titile为短信内容,message为邮件内容
* @param type
* @param title
* @param message
* */
public static void sendAlarm(BaseAlarmEntityType type, String title,
String message) { AlarmEntity alarmEntity = new AlarmEntity(type);
alarmEntity.setAlertTitle(title);
alarmEntity.setAlertMessage(message);
IHotelLoggerUtil.alarmInfo(alarmEntity);
} /**
* 发送报警短信短信
*
* @title 发送报警短信方法,titile为短信内容,message为邮件内容
* @param type
* @param title
* @param message
* */
public static void sendAlarm(AlarmEntityType type, String title,
String message) {
String serverName = "[机器名称]" + IPUtil.getServerName();
AlarmEntity alarmEntity = new AlarmEntity(type.getType());
alarmEntity.setAlertTitle(title + serverName);
alarmEntity.setAlertMessage(message);
IHotelLoggerUtil.alarmInfo(alarmEntity);
} /**
* 异步发送报警短信 sendAlarmAsync
*
* @Title: sendAlarmAsync
* @param type
* @param title
* @param message
*/
public static void sendAlarmAsync(AlarmEntityType type, String title,
String message) {
try {
String serverName = "[机器名称]" + IPUtil.getServerName();
final AlarmEntity alarmEntity = new AlarmEntity(type.getType());
alarmEntity.setAlertTitle(title + serverName);
alarmEntity.setAlertMessage(message); if (threadPoolExecutor != null) {
threadPoolExecutor.execute(new Runnable() {
@Override
public void run() {
try {
IHotelLoggerUtil.alarmInfo(alarmEntity);
} catch (Exception ex) {
IHotelLoggerUtil.error("异步发送报警执行异常"
, ex);
}
}
});
}
} catch (Exception ex) {
IHotelLoggerUtil.error("异步报警执行异常", ex);
}
}
}
 

ThreadPoolTaskExecutor异步的处理报警发送邮件短信比较耗时的东东的更多相关文章

  1. centos7之zabbix邮件报警(短信报警)

    前言 前面我们介绍了zabbix的基本linux和window及SNMP流量的简单监控,我们知道作为运维人员,需要7x24小时待命,但是我们不可能时时刻刻都坐在电脑旁边查看监控上的各个主机状态,所以我 ...

  2. python 发送邮件短信封装

    发送邮件 需要开启163的smtp服务 import smtplib from email.mime.text import MIMEText class MailSender(): def __in ...

  3. zabbix学习笔记:zabbix监控之短信报警

    zabbix学习笔记:zabbix监控之短信报警 zabbix的报警方式有多种,除了常见的邮件报警外,特殊情况下还需要设置短信报警和微信报警等额外方式.本篇文章向大家介绍短信报警. 短信报警设置 短信 ...

  4. 1、背景介绍及移动云MAS平台 --短信平台

    目的: 刚开发完成一套短信平台以及一个Web端短信发送系统,短信平台耗时两个周.短信发送系统耗时两个多月,开发使用的技术没什么高科技含量,在此主要是记录下很多情况的处理方案,希望能让大家提出改善方案和 ...

  5. mysubmail 短信报警

    https://www.mysubmail.com/chs/documents/developer/YPWD84   文本文档  官网:www.mysubmail.com 操作流程:快速接入短信 AP ...

  6. zabbix3配置短信报警

    需求:在zabbix服务器配置短信报警,当服务出现故障达到预警级别是通过发送短信的形式告诉运维人员,以便及时处理. 一.zabbix服务器端配置短信脚本 我的短信脚本放置位置为 /etc/zabbix ...

  7. a标签的妙用-拨打电话、发送短信、发送邮件

    前端时间在做手机WAP网站时,遇到需要点击页面上显示的电话号能直接拨号的需求,查找资料发现可以使用html的a标签完美实现该需求!记录下来以备后用...... 目前主流手机浏览器对H5的支持已经很不错 ...

  8. CactiEZ 中文版V10.1安装使用以及139邮箱短信报警设置

    说明:CactiEZ中文版V10.1是基于CentOS 6.0系统,整合Cacti等相关软件,重新编译而成的一个操作系统!   说明:CactiEZ中文版V10.1是基于CentOS 6.0系统,整合 ...

  9. server宕机监控、检測、报警程序(139绑定手机短信报警)monitor_down.sh

    宕机监控报警程序 一.   需求来源 宕机对运维人员来说,最痛苦了.怎样检測一台server是否还在正常执行,假设该server宕机,怎样在第一时间监測到并通知一线运维人员进行维护,最大化降低损失. ...

随机推荐

  1. Linux环境下的编译,链接与库的使用

    参考博客: http://www.cnblogs.com/qytan36/archive/2010/05/25/1743955.html http://m.blog.csdn.net/article/ ...

  2. Android中使用WebView, WebChromeClient和WebViewClient加载网页

    在android应用中,有时要加载一个网页,如果能配上一个进度条就更好了,而android 中提供了其很好的支持, 其中webView的一系列用法,比如 webView.getSettings().s ...

  3. android几种定时器机制及区别

    在android中,经常用到的定时器主要有以下几种实现:一.采用Handler与线程的sleep(long )方法二.采用Handler的postDelayed(Runnable, long) 方法三 ...

  4. JavaScript高级程序设计之寄生组合式继承

    在继承中常会出现两个问题: 父类的属性变成了子类的原型 构造器指向混乱 寄生组合式继承解决了这样的问题: 属性继承到属性 原型继承到原型 构造器指向明确 // 父类 var Super = funct ...

  5. vnextcn

    Flag 标题 通过 提交 AC% 难度   E1 编写Hello World网站 9 17 52% 1   E2 编写Hello World控制台程序 11 13 84% 1   E3 控制器基础练 ...

  6. 使用 Bumblebee 控制 NVIDIA 双显卡

    简介 Nvidia的双显卡切换技术叫Optimus(擎天柱),可惜只能在win7.vista下实现.Linux下没有对应的技术,当然苹果也没有.这导致独立显卡一直在启用,显卡发热升温,风扇狂转,却没有 ...

  7. 在ASP.NET中实现OAuth2.0(二)之打造自己的API安全策略

    1.场景介绍 公司开发了一款APP产品,前期提供的api接口都是裸奔状态 举个例子:想要获取某一个用户的数据,只需要传递该用户的ID就可以拿走数据(说多了都是泪) 现在想给这些接口穿个衣服,加个壳(对 ...

  8. RTLviewer与TechnologyMapViewer的区别?

    区别: 1.QUARTUS II 中往往要查看RTL Viewer,其实RTLview是编译后的结果,显示的图形都是调用标准单元的结果,这是和思维有关联的显示结果,跟工艺库,FPGA类型,都没有关系: ...

  9. SQLite数据库的基本API函数

    1 .打开数据库: 说明:打开一个数据库,文件名不一定要存在,如果此文件不存在, sqlite 会自动创建.第一个参数指文件名,第二个参数则是定义的 sqlite3 ** 结构体指针(关键数据结构), ...

  10. [转载]EF Code First 学习笔记:约定配置

    要更改EF中的默认配置有两个方法,一个是用Data Annotations(在命名空间System.ComponentModel.DataAnnotations;),直接作用于类的属性上面;还有一个就 ...