一、总结
- 使用某些变量的地方在2次以上的,强烈建议使用枚举值来维护变量,日后方便扩展。
- 查数据库的方法调用,能合并就净量去合并。
二、Bug描述
枚举变量的维护以及方法使用:
public class UsedOnce { public static enum ruleDetailsEnum { SOURCEREGIN("原区域"), TARGETREGIN("目的区域"), SOURCECITY("原城市"), TARGETCITY("目的城市"), SOURCESITE("原机房"), TARGETSITE("目的机房"), DEVICETYPE("设备类型"); private final String strValue; private ruleDetailsEnum(String strValue){ this.strValue = strValue; } public String getStrValue() { return strValue; } public static String getStrValueByName(String name) { for (ruleDetailsEnum orderDeviceType : ruleDetailsEnum.values()) { if (name.equals(orderDeviceType.name())) { return orderDeviceType.getStrValue(); } } return null; } } public static void main(String[] args) { UsedOnce.ruleDetailsEnum e = UsedOnce.ruleDetailsEnum.valueOf("DEVICETYPE"); switch (e.ordinal()) { case 0: System.out.println("原区域"); break; case 6: System.out.println("设备类型"); break; default: System.out.println("没有匹配到"); } } } // 结果输出:设备类型
查询数据库合并性能优化:
JVM堆中缓存当天的数据性能优化:
private Map<String, String> getAssignRates() { Date start = DateUtil.removeDays(new Date(), 1); String startTm = DateUtil.toString(start, DateUtil.DATE_FORMAT); String endTm = DateUtil.toString(DateUtil.removeDays(start, 90), DateUtil.DATE_FORMAT); List<LogisticsAtomic> list = new ArrayList<LogisticsAtomic>(); /* 缓存入JVM堆中;减少哈希碰撞;且只维护一个数据 */ String now = DateUtil.toString(new Date(), DateUtil.DATE_FORMAT); Map<String, List<LogisticsAtomic>> oneDayData = WorkOrderCst.ONEDAYDATA;if (oneDayData.keySet().contains(now)) { list = oneDayData.get(now); } else { list = logisticsWorkOrderBo.getLogisticsList90DaysBefore(startTm, endTm); oneDayData.clear(); oneDayData.put(now, list); } Map<String, String> map = new HashMap<String, String>(); for (LogisticsAtomic bean : list) { if (null != bean.getSpId()) { map.put(bean.getSpId().toString(), bean.getAssetCounts().toString()); } } return map; } //带null的数据:JSONUtils.toJSONString(map); //不带null的数据:JSON.toJSONString(map);
注意:存放在JVM堆中的map要放在枚举变量中。放在方法中,每次new一个Map不正确;放在*BoImpl层中,由于*BoImpl并不是单例,而我们的项目又是部署在集群之上的,所以要把定义的变量值维护在枚举类当中。涉及到JVM内存布局知识。
public class WorkOrderCst { // 维护一天的数据 public static Map<String, List<LogisticsAtomic>> ONEDAYDATA = new ConcurrentHashMap<String, List<LogisticsAtomic>>(); // 拆单时机房分隔符 public static final String SiteSplit = "#@#"; }
mapper层传入一个参数,筛选出最近三个月的数据:
SELECT COUNT(1) FROM idc_work_order_main WHERE gmt_create < CONCAT(‘2016-08-03‘,‘23:59:59‘) AND gmt_create > date_sub(‘2016-08-03 00:00:00‘, INTERVAL 3 MONTH)
完结。
时间: 2024-09-29 17:24:30