开发中遇到问题
今天在生产中遇到了并发导致数据null的问题:
代码:
public static String getAddressName(String type, String code) {
/*String strReturn = "";
ExeSQL exeSql = new ExeSQL();
String sql = "select placeName from ldaddress where placeType='" + type
+ "' and placeCode='" + code + "'";
strReturn = exeSql.getOneValue(sql);
return strReturn;*/
// 缓存减少查询次数
if(addressName == null || !addressName.containsKey( type + "_" + code )){
addressName = new HashMap<String, String>();
String sql = "select placeType,placeCode,placeName from ldaddress";
ExeSQL exesql = new ExeSQL();
SSRS ssrs = exesql.execSQL(sql);
String key = null;
String value = null;
for (int i = 1; i <= ssrs.getMaxRow(); i++) {
key = ssrs.GetText(i, 1) + "_" + ssrs.GetText(i, 2);
value = ssrs.GetText(i, 3);
addressName.put(key, value);
}
}
return addressName.get( type + "_" + code );
// end
}
问题解决:
public static String getAddressName(String type, String code) {
/*
* String strReturn = ""; ExeSQL exeSql = new ExeSQL(); String sql =
* "select placeName from ldaddress where placeType='" + type +
* "' and placeCode='" + code + "'"; strReturn =
* exeSql.getOneValue(sql); return strReturn;
*/
// start 缓存减少查询次数
synchronized (addressName) {
if (!addressName.containsKey(type + "_" + code)) {
String sql = "select placeType,placeCode,placeName from ldaddress";
ExeSQL exesql = new ExeSQL();
SSRS ssrs = exesql.execSQL(sql);
String key = null;
String value = null;
for (int i = 1; i <= ssrs.getMaxRow(); i++) {
key = ssrs.GetText(i, 1) + "_" + ssrs.GetText(i, 2);
value = ssrs.GetText(i, 3);
addressName.put(key, value);
}
}
}
return addressName.get(type + "_" + code);
// end
}