浏览 1537 次
锁定老帖子 主题:hadoop的config
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-11-09
主要以下几个类 Configurable Something that may be configured with a Configuration. void setConf(Configuration conf); Configuration getConf(); Configured Base class for things that may be configured with a Configuration. Configuration Provides access to configuration parameters. 这个类值得好好读一下,一个简单的配置类,就完成了这么多功能,而且代码也不乱。 配置文件的加载顺序。 默认配置文件,用户配置文件,调用方法set的属性等等,overlay的使用。 final的定义。 支持${var}参数配置。 还可以设置枚举,int范围,string集合或数组。 在getLocalPath方法中, for (int i = 0; i < dirs.length; i++) { // try each local dir int index = (hashCode+i & Integer.MAX_VALUE) % dirs.length; ... } 这行代码有疑问,代码功能是随机从数组一个位置遍历整个数组,但是& Integer.MAX_VALUE貌似没有意义。 这个想通了,是为了取正整数。 debug method. 这个貌似调整为UT会更好一些。 兼容性的考虑。 WeakHashMap保持加载的Configuration对象. CopyOnWriteArrayList的使用。 Tool A tool interface that supports handling of generic command-line options. ToolRunner A utility to help run Tools. 附一些简单的使用例子。 public class TestConfig { private Configuration config; private String key; @Before public void setUp() { config = new Configuration(); key = "allen_key"; } /** * 可以配置10进制或16进制的int。 * */ @Test public void testSimpleConfig() { config.set(key, "123"); int value = config.getInt(key, -1); Assert.assertEquals(123, value); config.set(key, "0X11"); value = config.getInt(key, -1); Assert.assertEquals(17, value); } private static enum MyEnum { A, B; }; /** * 可以配置枚举。 * */ @Test public void testEnum() { config.setEnum(key, MyEnum.A); MyEnum value = config.getEnum(key, MyEnum.B); Assert.assertSame(MyEnum.A, value); } /** * 可以配置int范围。 * */ @Test public void testIntRange() { config.setStrings(key, "-5,10-12,15,20-"); IntegerRanges range = config.getRange(key, null); // -5 Assert.assertFalse(range.isIncluded(-1)); Assert.assertTrue(range.isIncluded(0)); Assert.assertTrue(range.isIncluded(5)); Assert.assertFalse(range.isIncluded(6)); // 10-12 Assert.assertFalse(range.isIncluded(9)); Assert.assertTrue(range.isIncluded(10)); Assert.assertTrue(range.isIncluded(12)); Assert.assertFalse(range.isIncluded(13)); // 15 Assert.assertFalse(range.isIncluded(14)); Assert.assertTrue(range.isIncluded(15)); Assert.assertFalse(range.isIncluded(16)); // 20- Assert.assertFalse(range.isIncluded(19)); Assert.assertTrue(range.isIncluded(20)); Assert.assertTrue(range.isIncluded(60)); } /** * 可以配置String集合。 * */ @Test public void testStringCollection() { config.setStrings(key, "a,b"); Collection<String> c = config.getStringCollection(key); Assert.assertTrue(c.contains("a")); Assert.assertTrue(c.contains("b")); } /** * 可以配置String数组。 * */ @Test public void testStringArray() { config.setStrings(key, "a,b"); String[] strs = config.getStrings(key); Assert.assertEquals("a", strs[0]); Assert.assertEquals("b", strs[1]); } /** * 可以定义变量。 * */ @Test public void testVar() { config.set("basekey", "allen"); config.set("subkey", "hi,${basekey}"); String value = config.get("subkey"); Assert.assertEquals("hi,allen", value); } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |