ThreadPoolTaskExecutor异步的处理报警发送邮件短信比较耗时的东东
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异步的处理报警发送邮件短信比较耗时的东东的更多相关文章
- centos7之zabbix邮件报警(短信报警)
前言 前面我们介绍了zabbix的基本linux和window及SNMP流量的简单监控,我们知道作为运维人员,需要7x24小时待命,但是我们不可能时时刻刻都坐在电脑旁边查看监控上的各个主机状态,所以我 ...
- python 发送邮件短信封装
发送邮件 需要开启163的smtp服务 import smtplib from email.mime.text import MIMEText class MailSender(): def __in ...
- zabbix学习笔记:zabbix监控之短信报警
zabbix学习笔记:zabbix监控之短信报警 zabbix的报警方式有多种,除了常见的邮件报警外,特殊情况下还需要设置短信报警和微信报警等额外方式.本篇文章向大家介绍短信报警. 短信报警设置 短信 ...
- 1、背景介绍及移动云MAS平台 --短信平台
目的: 刚开发完成一套短信平台以及一个Web端短信发送系统,短信平台耗时两个周.短信发送系统耗时两个多月,开发使用的技术没什么高科技含量,在此主要是记录下很多情况的处理方案,希望能让大家提出改善方案和 ...
- mysubmail 短信报警
https://www.mysubmail.com/chs/documents/developer/YPWD84 文本文档 官网:www.mysubmail.com 操作流程:快速接入短信 AP ...
- zabbix3配置短信报警
需求:在zabbix服务器配置短信报警,当服务出现故障达到预警级别是通过发送短信的形式告诉运维人员,以便及时处理. 一.zabbix服务器端配置短信脚本 我的短信脚本放置位置为 /etc/zabbix ...
- a标签的妙用-拨打电话、发送短信、发送邮件
前端时间在做手机WAP网站时,遇到需要点击页面上显示的电话号能直接拨号的需求,查找资料发现可以使用html的a标签完美实现该需求!记录下来以备后用...... 目前主流手机浏览器对H5的支持已经很不错 ...
- CactiEZ 中文版V10.1安装使用以及139邮箱短信报警设置
说明:CactiEZ中文版V10.1是基于CentOS 6.0系统,整合Cacti等相关软件,重新编译而成的一个操作系统! 说明:CactiEZ中文版V10.1是基于CentOS 6.0系统,整合 ...
- server宕机监控、检測、报警程序(139绑定手机短信报警)monitor_down.sh
宕机监控报警程序 一. 需求来源 宕机对运维人员来说,最痛苦了.怎样检測一台server是否还在正常执行,假设该server宕机,怎样在第一时间监測到并通知一线运维人员进行维护,最大化降低损失. ...
随机推荐
- 使用Linux调用资源库中的Job报错-ERROR: No repository provided, can't load job.
使用kettle调用资源库中的作业或者是转换,需要注意一下两个问题: 问题一:(-rep后不需要IP)标准shell代码如下 #!/bin/bash export JAVA_HOME=/usr/lib ...
- iOS进阶学习-数据库
一.数据库管理系统 1.SQL语言概述:SQL是Structured Query Language(结构化查询语言)的缩写.SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言. 2.常见 ...
- iOS8 无法设置定位服务
针对iOS8系统,需要在plist文件中添加这两个参数 NSLocationAlwaysUsageDescription = YES NSLocationWhenInUseUsageDescripti ...
- .NET基础:修饰符
访问修饰符 软道语录定义: 访问修饰符就是类,属性和方法的电影分级制度 . public:访问不受限制. protected:访问仅限于包含类或从包含类派生的类型.只有包含该成员的类以及继承的类可以存 ...
- C#判断字符串为空
string str = null; if (string.IsNullOrWhiteSpace(str)) { MessageBox.Show("字符串为null"); } if ...
- 与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。
今天同学请教我数据库为什么打不开了,打开SQL Server 2008 的 SQL Server Management Studio,输入sa的密码发现,无法登陆数据库?提示以下错误: "在 ...
- 网页设计师必备的10个CSS技巧
CSS是网页设计师的基础,对CSS的了解能使他们能够设计出更加美观别致的网页.使用CSS技巧来巧妙地处理CSS是非常令设计师着迷的事情.在CSS的深海世界里有很多有意思的东西,你只需要找到最适合你的就 ...
- JSP动作学习一
创建一个简单的模拟登陆功能的网页,没有用数据库技术,只是简单的学习jsp语法 首先创建一个登陆页面 <%@ page language = "java" import=&qu ...
- 【每日scrum】NO.4
1.掌握了如何求两点间的最短距离这个算法.
- C#打印页面的纸张设置问题Spread表格控件
这段时间学习spread控件,用到打印设置上边,其他的设置都还好说,但是打印纸张的大小,纸张类型等把我折腾的够呛,找了半天才找到,记录下来备查. 1.打印纸张类型: System.Drawing.Pr ...