【发布时间】:2015-05-28 07:19:05
【问题描述】:
我需要从属性文件动态地将键和值添加到哈希图中,而无需重新启动服务器。所以我在我的对象中创建了一个静态哈希图,它在服务器启动时从文件中加载数据。因此,在随后添加属性时,我将更新此哈希图。这是我的 HashMap 实例化。
private static Map<String, String> map = new HashMap<>();
所以现在,当我添加一个属性时,我初始化了地图,现在如果我执行我的 main 方法,因为它是同一个类加载器,当我在调试模式下查看时,我仍然在我的地图中看到一个新值。 例如:如果我将 Europe=EU 添加为新属性,我会在 Debug 模式下看到这个值,其他属性为 [Europe=EU, India=IN] 如果我运行 line map.get("Europe") 我会得到价值为空。
我不清楚这种行为。是没有提交实例还是我做错了什么。这是我的代码:
public class CountryMap {
private static Map<String, String> map = new HashMap<>();
private static final CountryMap countrymap = new CountryMap();
static {
initmap();
}
private static void initmap() {
IPropertyReader reader = (IPropertyReader) MyAppContext
.getInstance().getBean("propreader"); //To read from location files
try {
Properties props = reader.loadPropertyFile();
Set<Entry<Object, Object>> propset = props.entrySet();
for (Entry<Object, Object> entry : propset) {
map.put((String) entry.getKey(),
entry.getValue().toString());
}
} catch (Throwable e) {
e.printStackTrace();
}
}
public static CountryMap getInstance() {
return countrymap;
}
public String getvalue(String key) {
return map.get(key);
}
public void addtomap(String key, String value) {
map.put(key, value);
}
}
【问题讨论】:
-
请输入代码。并详细介绍您的环境。如果您可能同时从多个线程访问此映射,您可能希望使用
Map的并发版本。 -
我想是你的代码有问题...
-
添加代码以便于理解
标签: java spring collections hashmap