web上下文监听器ServletContextListener
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的更多相关文章
- spring中的web上下文,spring上下文,springmvc上下文区别(超详细)
web上下文(Servlet context),spring上下文(WebApplication Context),springmvc上下文(mlWebApplicationCont)之间区别. 上下 ...
- SpringMVC4零配置--Web上下文配置【MvcConfig】
与SpringSecurity的配置类似,spring同样为我们提供了一个实现类WebMvcConfigurationSupport和一个注解@EnableWebMvc以帮助我们减少bean的声明. ...
- Servlet之ServletContext获取web上下文路径、全局参数、和Attribute(域)
1)获取web上下文路径 public void doGet(HttpServletRequest request, HttpServletResponse response) throws Serv ...
- Java Web(五) 监听器Listener
监听器概述 在上一篇里介绍了过滤器Filter,而Listener是Servlet的另一个高级特性.Listener用于监听Java Web程序中的事件,例如创建,修改,删除Session,reque ...
- web.xml 监听器
一.作用 Listener就是在application,session,request三个对象创建.销毁或者往其中添加修改删除属性时自动执行代码的功能组件. Listener是Servlet的监听器, ...
- web 自定义监听器中设置加载系统相关的静态变量及属性
直接上代码: 在src下新建一个StartListener 实现接口ServletContextListener,: /** * @Title:StartListener.java * @Packag ...
- 【java web】监听器listener
一.简介 Java的监听器,也是系统级别的监听.监听器随web应用的启动而启动.Java的监听器在c/s模式里面经常用到,它会对特定的事件产生产生一个处理.监听在很多模式下用到,比如说观察者模式,就是 ...
- web的监听器,你需要知道这些...
一.简介 Listener是Servlet规范的另一个高级特性,它用于监听java web程序的事件,例如创建.修改.删除session,request,context等,并触发相应的处理事件,这个处 ...
- 通过web.xml监听器启动main方法
web.xml中添加要启动的类 <listener> <listener-class>server.NettyServer</listener-class> < ...
随机推荐
- 服务器BMC(带外)
服务器除了装linux,windows系统外,相应还有一个可通过网线(服务器默认带外地址--可改)连接具体厂商服务器的BMC(Baseboard Management Controller,基板管理控 ...
- Qt富文本编辑器QTextDocument
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt富文本编辑器QTextDocument 本文地址:https://www.tech ...
- 用到的C++标准库
std::set<type>, 模板写的平衡二叉树的集合容器, method: insert, count, std:map<int, string>, 映射和多重映射基于某一 ...
- 更改HTTP头信息
http信息分三部分 1.请求行 GET lizi.php HTTP/1.1 2.HTTP头信 Host: localhost Connection: keep-alive Cache-Contr ...
- 第165天:canvas绘制圆环旋转动画
canvas绘制圆环旋转动画——面向对象版 1.HTML 注意引入Konva.js库 <!DOCTYPE html> <html lang="en"> &l ...
- EF中Json序列化对象时检测到循环引用的解决办法
MVC4 EF中将数据表外键引用的是自身,转换成Json时,总是提示错误:“序列化类型为....的对象时检测到循环引用.”: 解决办法: 把要序列化的对象转为匿名对象去掉导航属性,如下 :本来是var ...
- P2766 最长不下降子序列问题
题目描述 «问题描述: 给定正整数序列x1,...,xn . (1)计算其最长不下降子序列的长度s. (2)计算从给定的序列中最多可取出多少个长度为s的不下降子序列. (3)如果允许在取出的序列中多次 ...
- WPF 如何加载图片
Uri ri = new Uri(AppDomain.CurrentDomain.BaseDirectory + "Resources/exp.jpg"); ImageSource ...
- 《Java程序设计》第九周学习总结 20165218 2017-2018-2
20165218 2017-2018-2 <Java程序设计>第9周学习总结 教材学习内容总结 第13章 Java网络编程 URL类 位于java.net包,使用URL创建对象的应用程序称 ...
- bzoj2089&2090: [Poi2010]Monotonicity
双倍经验一眼题... f[i][1/2]表示以i结尾,当前符号应该是</>的最长上升子序列, 用BIT优化转移就好 =的话就不用说了吧= = #include<iostream> ...
1 package com.liveyc.common.listener;
import javax.servlet.ServletContextEvent;