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. 如何在一台 web 服务器上注册CA证书

    试验环境介绍(CA的主机为192.168.23.10.httpd的主机为:192.168.23.11) 1:新建一台web服务器,主机名为www yum install -y httpd   2:生成 ...

  2. python的N个小功能之正则匹配

    1.. 匹配任意除换行符“\n”外的字符:2.*表示匹配前一个字符0次或无限次:3.+或*后跟?表示非贪婪匹配,即尽可能少的匹配,如*?重复任意次,但尽可能少重复,惰性匹配:4. .*? 表示匹配任意 ...

  3. jquery中的append功能相当于剪切的作用 将原来的元素剪切走

    jquery中的append功能相当于剪切的作用 将原来的元素剪切走

  4. Moya/RxSwift/ObjectMapper/Alamofire开发

    废话不多说直接上代码 // // MoyaNetWorking.swift // GreenAir // // Created by BruceAlbert on 2017/9/18. // Copy ...

  5. 【Java】数据库查询的数据直接以指定文件类型下载到本地(弹出下载框)

    欲实现的功能目标:当点击下图的导出数据文件时弹出文件下载框,默认csv格式,用户自定义下载的本地路径 遇到的问题: 1.项目之前做过一次下载,但是是使用了本地文件模板.用输入流读取文件模板,插入数据, ...

  6. 【转】小心stringstream.str()字符串用法的陷阱

    --------------------- 作者:心中那自由的世界 来源:CSDN 原文:https://blog.csdn.net/119365374/article/details/7744678 ...

  7. ubuntu成功安装搜狗输入法

    在安装之前,我们要先了解一个事实,那就是linux下安装软件和Windows是非常不同的,并不是简单地双击安装包就可以安装了.linux很多软件都有自己的一个依赖源,如果不先安装好这些依赖源,你是无法 ...

  8. ans menu list

    ans menu list 1. 系统配置 a) 基本设置 i. NTP ii. 配置模式 iii. 主机信息 b) 高可用性 i. 节点 ii. 路由监视器 iii. 故障转移接口群 c) 设备标识 ...

  9. Yarn 模式 与 电影受众分析系统

    yarn模式分为两种模式: 一.Yarn-cluster模式 1.通过spark-submit提交spark jar包(Application),与RM进行通信请求启动AM 2.RM接收到请求之后,会 ...

  10. HDU--1874

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 分析:SPFA|Dijkastra. #include<iostream> #inc ...