1 package com.liveyc.common.listener;

 import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils; import com.liveyc.common.utils.ApplicationContextHelper;
import com.liveyc.common.utils.Constants;
import com.liveyc.common.utils.GetConnection;
import com.liveyc.common.utils.ServiceHelper; public class ApplicantListener implements ServletContextListener{ private static WebApplicationContext webApplicationContext;
private static ApplicationContextHelper helper = new ApplicationContextHelper();
@Override
public void contextInitialized(ServletContextEvent sce) {
// TODO Auto-generated method stub
webApplicationContext = WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext());
helper.setApplicationContext(webApplicationContext);
Constants.WEB_APP_CONTEXT = webApplicationContext; GetConnection getConnection = ServiceHelper.getgetConnection();
Constants.CONN1 = getConnection.conn1();
Constants.CONN2 = getConnection.conn2();
} @Override
public void contextDestroyed(ServletContextEvent sce) {
// TODO Auto-generated method stub } }

web.xml配置

spring注入

 package com.liveyc.common.utils;

 import java.net.URI;

 import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hdfs.server.namenode.ha.proto.HAZKInfoProtos;
import org.apache.hadoop.ipc.Client;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat;
import org.springframework.web.bind.annotation.RequestMapping; import com.google.protobuf.InvalidProtocolBufferException; public class GetConnection { private static final Log LOG = LogFactory.getLog(HdfsUtils.class); public Configuration conn1(){
Configuration conf = new Configuration();
System.setProperty("HADOOP_USER_NAME", Constants.HDFS_USER_NAME);
//String hostname = getHostname(Constants.ZOOKEEPER_IP, Constants.ZOOKEEPER_PORT, Constants.ZOOKEEPER_TIMEOUT, Constants.DATA_DIR);
String hostname = SysProperties.getString("hostname1");
if (hostname != null && hostname != "") {
conf.set("fs.default.name", "hdfs://" + hostname + ":" + Constants.HDFS_PROT); // active节点
// 或者通过nameservice的名字直接连接 ,不用通过zookeeper获取active状态的节点
// conf.set("fs.default.name", "hdfs://" + nameservice1 + ":" +
// HDFS_PROT); // active节点
conf.set("dfs.socket.timeout", "900000");
conf.set("dfs.datanode.handler.count", "20");
conf.set("dfs.namenode.handler.count", "30");
conf.set("dfs.datanode.socket.write.timeout", "10800000"); } else {
conf.set("fs.default.name", Constants.HDFS_ADDR); // 如果没配HA默认使用配置的master
}
Client.setConnectTimeout(conf, Constants.HDFS_TIMEOUT); // 超时时间
return conf;
} public Configuration conn2(){
Configuration conf = new Configuration();
System.setProperty("HADOOP_USER_NAME", Constants.HDFS_USER_NAME);
//String hostname = getHostname(Constants.ZOOKEEPER_IP, Constants.ZOOKEEPER_PORT, Constants.ZOOKEEPER_TIMEOUT, Constants.DATA_DIR);
String hostname = SysProperties.getString("hostname2");
if (hostname != null && hostname != "") {
conf.set("fs.default.name", "hdfs://" + hostname + ":" + Constants.HDFS_PROT); // active节点
// 或者通过nameservice的名字直接连接 ,不用通过zookeeper获取active状态的节点
// conf.set("fs.default.name", "hdfs://" + nameservice1 + ":" +
// HDFS_PROT); // active节点
conf.set("dfs.socket.timeout", "900000");
conf.set("dfs.datanode.handler.count", "20");
conf.set("dfs.namenode.handler.count", "30");
conf.set("dfs.datanode.socket.write.timeout", "10800000");
} else {
conf.set("fs.default.name", Constants.HDFS_ADDR); // 如果没配HA默认使用配置的master
}
Client.setConnectTimeout(conf, Constants.HDFS_TIMEOUT); // 超时时间
return conf;
} public static boolean getActive(){
Configuration conf = Constants.CONN1;
FileSystem fs = null;
try {
fs = FileSystem.get(URI.create(Constants.hdfsRootPath), conf);
FileStatus[] stats = fs.listStatus(new Path(Constants.hdfsRootPath));
} catch (Exception e) {
return false;
}
return true;
} public static Configuration getconf(){
Configuration conf = new Configuration();
if(GetConnection.getActive()){
conf = Constants.CONN1;
}else{
conf = Constants.CONN2;
}
return conf;
}
/**
*
* @Title: getHostname
* @Description: 获取active节点(集群配置HA的前提下)
* @param ZOOKEEPER_IP
* zookeeperip
* @param ZOOKEEPER_PORT
* zookeeper端口号
* @param ZOOKEEPER_TIMEOUT
* 超时时间
* @param DATA_DIR
* HA在zookeeper下的路径
* @return
*/
public String getHostname(String ZOOKEEPER_IP, int ZOOKEEPER_PORT, int ZOOKEEPER_TIMEOUT, String DATA_DIR) {
String hostname = null;
Watcher watcher = new Watcher() {
@Override
public void process(org.apache.zookeeper.WatchedEvent event) {
LOG.info("event:" + event.toString());
}
};
ZooKeeper zk = null;
byte[] data1 = null;
String[] iparr = ZOOKEEPER_IP.split(";");
for (String ip : iparr) {
try {
zk = new ZooKeeper(ip + ":" + ZOOKEEPER_PORT, ZOOKEEPER_TIMEOUT, watcher);
data1 = zk.getData(DATA_DIR, true, new Stat());
} catch (Exception e) {
LOG.info("This ip is not active..." + ip);
continue;
}
if (data1 != null) {
LOG.info("This ip is normal..." + ip);
try {
hostname = HAZKInfoProtos.ActiveNodeInfo.parseFrom(data1).getHostname();
} catch (InvalidProtocolBufferException e) {
LOG.error(e);
}
return hostname;
}
}
return hostname;
}
}

web上下文监听器ServletContextListener的更多相关文章

  1. spring中的web上下文,spring上下文,springmvc上下文区别(超详细)

    web上下文(Servlet context),spring上下文(WebApplication Context),springmvc上下文(mlWebApplicationCont)之间区别. 上下 ...

  2. SpringMVC4零配置--Web上下文配置【MvcConfig】

    与SpringSecurity的配置类似,spring同样为我们提供了一个实现类WebMvcConfigurationSupport和一个注解@EnableWebMvc以帮助我们减少bean的声明. ...

  3. Servlet之ServletContext获取web上下文路径、全局参数、和Attribute(域)

    1)获取web上下文路径 public void doGet(HttpServletRequest request, HttpServletResponse response) throws Serv ...

  4. Java Web(五) 监听器Listener

    监听器概述 在上一篇里介绍了过滤器Filter,而Listener是Servlet的另一个高级特性.Listener用于监听Java Web程序中的事件,例如创建,修改,删除Session,reque ...

  5. web.xml 监听器

    一.作用 Listener就是在application,session,request三个对象创建.销毁或者往其中添加修改删除属性时自动执行代码的功能组件. Listener是Servlet的监听器, ...

  6. web 自定义监听器中设置加载系统相关的静态变量及属性

    直接上代码: 在src下新建一个StartListener 实现接口ServletContextListener,: /** * @Title:StartListener.java * @Packag ...

  7. 【java web】监听器listener

    一.简介 Java的监听器,也是系统级别的监听.监听器随web应用的启动而启动.Java的监听器在c/s模式里面经常用到,它会对特定的事件产生产生一个处理.监听在很多模式下用到,比如说观察者模式,就是 ...

  8. web的监听器,你需要知道这些...

    一.简介 Listener是Servlet规范的另一个高级特性,它用于监听java web程序的事件,例如创建.修改.删除session,request,context等,并触发相应的处理事件,这个处 ...

  9. 通过web.xml监听器启动main方法

    web.xml中添加要启动的类 <listener> <listener-class>server.NettyServer</listener-class> < ...

随机推荐

  1. linux 内核态调试函数BUG_ON()[转]

    一些内核调用可以用来方便标记bug,提供断言并输出信息.最常用的两个是BUG()和BUG_ON(). 当被调用的时候,它们会引发oops,导致栈的回溯和错误信息的打印.为什么这些声明会导致 oops跟 ...

  2. bzoj2818 Gcd(欧拉函数)

    Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. Input 一个整数N Output 如题 Sample Input 4 Sam ...

  3. bzoj1390 [CEOI2008] Fence

    题意 给出n个白点和m个黑点.现在你需要选择一些白点把黑点圈起来.每有一个黑点不能被选出的白点组成的凸包包含就需要付出111的代价,每选出一个白点就需要付出20的代价.要求最小化代价之和 n,m< ...

  4. P2812 校园网络【[USACO]Network of Schools加强版】

    题目背景 浙江省的几所OI强校的神犇发明了一种人工智能,可以AC任何题目,所以他们决定建立一个网络来共享这个软件.但是由于他们脑力劳动过多导致全身无力身体被♂掏♂空,他们来找你帮助他们. 题目描述 共 ...

  5. [BZOJ4653][NOI2016]区间 贪心+线段树

    4653: [Noi2016]区间 Time Limit: 60 Sec  Memory Limit: 256 MB Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],. ...

  6. [您有新的未分配科技点]数位dp:从懵X到板子(例题:HDU2089 不要62)

    数位dp主要用来处理一系列需要数数的问题,一般套路为“求[l,r]区间内满足要求的数/数位的个数” 要求五花八门……比如“不出现某个数字序列”,“某种数的出现次数”等等…… 面对这种数数题,暴力的想法 ...

  7. 【刷题】BZOJ 2096 [Poi2010]Pilots

    Description Tz又耍畸形了!!他要当飞行员,他拿到了一个飞行员测试难度序列,他设定了一个难度差的最大值,在序列中他想找到一个最长的子串,任意两个难度差不会超过他设定的最大值.耍畸形一个人是 ...

  8. 洛谷P1242 新汉诺塔 【神奇的递归】

    题目描述 设有n个大小不等的中空圆盘,按从小到大的顺序从1到n编号.将这n个圆盘任意的迭套在三根立柱上,立柱的编号分别为A.B.C,这个状态称为初始状态. 现在要求找到一种步数最少的移动方案,使得从初 ...

  9. Linux遇到的两个问题

    编译C++的和编译C语言的命令不同. 编译C++,应当先安装g++. 然后可以用#g++ filename.cpp -o filename 进行编译 编译C语言是用#gcc filename.c -o ...

  10. rename table table1 to table2;

    1. MYSQL rename table table1 to table2;