import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
/**
* Copyright @ 2013QIANLONG.
* All right reserved.
* Class Name : com.mobanker.config.core.zookeeper.config
* Description :
* Author : gaohailiang
* Date : 2016/1/18
*/
@Data
@EqualsAndHashCode(callSuper = false)
@ToString(callSuper = true)
@SuppressWarnings("all")
public class ZookeeperConfig implements Serializable {
private static final long serialVersionUID = 1L;
private String connection ;
private String nameSpace ;
private String staticConfigPath ;
private String dynamicConfigPath ;
/**
* 方法 setZookeeperConfig 功能描述 :通过反射、根据application.properties中读取到的
* 属性props,设置zookeeperConfig
* @author cailinfeng
* @createTime 2016/1/19
* @param
* @return
*
*/
public static ZookeeperConfig setZookeeperConfig(Properties props) throws Exception{
/**
* 通过反射,遍历props,设置zookeeperConfig配置
*/
ZookeeperConfig zookeeperConfig = new ZookeeperConfig();
Class classType = zookeeperConfig.getClass();
Method[] methods = classType.getMethods();
Map<String, Method> methodMap = new HashMap<String, Method>();
for (Method method : methods) {
methodMap.put(method.getName(), method);
}
Map<String, Class> typeMap = new HashMap<String, Class>();
Map<String, Field> fieldMap = new HashMap<String, Field>();
for (Class<?> clazz = classType; clazz != Object.class; clazz = clazz.getSuperclass()) {
try {
Field[] declaredFields = clazz.getDeclaredFields();
for (Field field : declaredFields) {
if (!fieldMap.containsKey(field.getName())) {
fieldMap.put(field.getName(), field);
typeMap.put(field.getName(), field.getType());
}
}
} catch (Exception e) {
// 这里甚么都不要做!并且这里的异常必须这样写,不能抛出去。
// 如果这里的异常打印或者往外抛,则就不会执行clazz =
// clazz.getSuperclass(),最后就不会进入到父类中了
}
}
for (Field field : fieldMap.values()) {
String fieldName = field.getName();
String fieldNameSub = null;
if (fieldName.length() == 1) {
fieldNameSub = fieldName.substring(0, 1).toLowerCase();
} else {
fieldNameSub = fieldName.substring(0, 1).toLowerCase() + fieldName.substring(1, fieldName.length());
}
String setMethodName = "set" + fieldNameSub;
Method setMethod = methodMap.get(setMethodName);
for(Object key : props.keySet()){
if((ZookeeperConstants.prefix+fieldName).equalsIgnoreCase((String) key)){
setMethod.invoke(zookeeperConfig,props.get(key));
}
}
}
return zookeeperConfig;
}
}
分享到:
相关推荐
《Zookeeper实战:ConfigServer代码样例解析》 在分布式系统中,Zookeeper作为一个高可用的分布式协调服务,被广泛应用于配置管理、命名服务、分布式锁等场景。本篇文章将聚焦于Zookeeper的一个典型应用——Config...
通过Spring Cloud Zookeeper Config,可以将应用的配置存储在Zookeeper中,实现配置的集中管理和动态更新。 **8. 安全性与性能** 在生产环境中,为了保证服务的安全性和稳定性,可能需要对Zookeeper进行安全配置,...
"fs-config.rar_fs config_fs_config_zookeeper"这个标题暗示了我们讨论的是一个使用Zookeeper进行配置管理的解决方案,具体来说,可能是名为"fs-config"的系统或框架。Zookeeper是一个广泛使用的开源项目,由Apache...
ZooKeeper 未授权访问修复建议 ZooKeeper 作为一个分布式应用程序协调服务,提供了高效、可靠的分布式锁、队列、节点管理等功能。但是,如果 ZooKeeper 没有正确地配置访问权限,就可能会出现未授权访问的问题,...
- **创建配置接口**:为了管理IP黑白名单,我们需要在`src/main/resources/config`目录下新增配置文件,如`ipFilters.conf`,并提供读取和解析这些配置的接口,这可能涉及到`src/main/java/org/apache/zookeeper/...
linux下编译zookeeper3.7.0出的头文件和库: proto.h recordio.h zookeeper.h zookeeper.jute.h zookeeper_log.h zookeeper_version.h libzookeeper_mt.a libzookeeper_mt.la libzookeeper_mt.so libzookeeper_mt....
Using config: /home/java/zookeeper-3.4.6/bin/../conf/zoo.cfg Starting zookeeper ... STARTED ``` **8. 查询 Zookeeper 状态** ``` zkServer.sh status ``` 查询命令用于查看 Zookeeper 的运行状态。 **9. ...
- 引入`spring-cloud-starter-zookeeper-config`,配置`spring.cloud.config.uri`指向Zookeeper服务器的配置路径。 - 应用启动时,从Zookeeper获取配置信息,实现动态配置。 - 支持配置文件版本控制和环境隔离,...
在服务配置方面,`Spring Cloud Zookeeper Config`使得我们可以将配置信息存储在Zookeeper中,服务实例在启动时从Zookeeper获取配置,从而实现配置的集中管理和动态更新。这意味着,当配置发生变更时,无需重启服务...
每个ZNode都拥有一个路径,如`/app/config`,并可以存储数据,同时具有ACL(访问控制列表)和时间戳等元数据。 2. **层次命名空间**:Zookeeper的数据结构是一个树形结构,与文件系统类似,允许用户以层次化的方式...
Using config: /usr/local/zookeeper-3.4.6/bin/../conf/zoo.cfg Starting zookeeper ... STARTED ``` 2. **检查服务状态** ```bash zkServer.sh status ``` 3. **停止Zookeeper服务** ```bash zkServer...
sasl.clientconfig=Client authProvider.1=org.apache.zookeeper.auth.Provider ``` 在Linux客户端,我们可以通过`zkCli.sh`命令行工具进行权限控制。鉴权操作主要包括认证和设置/查看ACL。认证通常通过`auth`命令...
# Set the path for where zookeeper config dir is export ZOOCFGDIR=/home/hfut/zookeeper-3.4.5/conf ``` 接着,我们需要配置全局环境变量。打开 `~/.bash_profile` 文件并添加 Sqoop 的路径: ```bash [hfut@...
Kafka需要ZooKeeper的地址,所以在Kafka的`config\server.properties`文件中配置: - `zookeeper.connect`:设置为`localhost:2181`,表示连接本地的ZooKeeper服务。 **5. 配置Kafka** 在`config\server....
6. **ZooKeeper的数据模型**:ZooKeeper的数据结构类似于文件系统,由层次化的路径名表示,如`/app1/config`。每个路径名称为ZNode,可以存储数据和元数据。 7. **Watcher机制**:ZooKeeper提供了一种事件监听机制...
一款好用的zookeeper配置内容...带图形界面,修改config中的config.xml,添加需要管理的zookeeper地址信息,同时可以定义两个用户权限:admin/guest。 github上有源码,这个是打包后的jar文件,可以直接通过jre来运行。
1. **配置文件**:`config.cfg`是ZKUI的配置文件,主要包含Zookeeper服务器的地址信息、端口以及认证参数等。在使用前,用户需要根据实际的Zookeeper集群配置进行修改。 2. **运行程序**:`zkui-2.0-SNAPSHOT-jar-...
3. **配置Dubbo服务提供者**:在`dubbo-Service`的配置文件(如`dubbo-config.xml`)中,指定服务接口、实现类、版本等信息,并设置Zookeeper作为注册中心。 4. **配置Zookeeper连接**:在服务提供者和消费者的配置...
2. 数据模型:Zookeeper的数据模型类似于文件系统,由层次化的路径名(如`/app/service/config`)组成,称为ZNode。每个ZNode可以存储数据,并且有自己的子节点。 3. 观察者模式:Zookeeper支持观察者模式,客户端...
在"Arguments"部分,你可以添加启动Zookeeper的参数,如"-config"来指定配置文件的位置。默认情况下,Zookeeper的配置文件是`conf/zoo.cfg`。在这里,你需要根据实际环境修改配置,例如设置数据存储目录(dataDir)...