zoukankan      html  css  js  c++  java
  • 开发中遇到问题

    今天在生产中遇到了并发导致数据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
     }

  • 相关阅读:
    在docker容器中访问宿主机端口
    springcloud ActiveMQ设置多个并行消费者
    Spring boot activeMQ 设置并行消费
    redis命令行如何清空缓存(windows环境下)
    一文读懂PostgreSQL-12分区表
    PostgreSQL 那些值得尝试的功能,你知道多少?
    Windows如何设置或更改PostgreSQL数据目录位置
    postgresql 致命错误: 已保留的连接位置为执行非复制请求的超级用户预留
    为什么没有插入数据,但已用存储空间会增加
    postgresql批量修改表的owner
  • 原文地址:https://www.cnblogs.com/gtaxmjld/p/5238467.html
Copyright © 2011-2022 走看看