曲不成歌 2019-12-20 18:01 采纳率: 0%
浏览 230
已结题

如何在servlet init方法中获取bean对象

public class TuyaListener extends HttpServlet {
/**
*
/
private static final long serialVersionUID = 1L;
private final String url_cn = "pulsar+ssl://mqe.tuyacn.com:7285/";
private final String url_eu = "pulsar+ssl://mqe.tuyaeu.com:7285/";
private final String url_us = "pulsar+ssl://mqe.tuyaus.com:7285/";
private final String accessId = "
************************";
private final String accessKey = "***********************";
@Autowired
private EICBaseDao eicBaseDao;

public void init() throws ServletException{
    super.init();
    /*WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());  
    eicBaseDao = (EICBaseDao)wac.getBean("eICBaseDao");  这种方法不行*/
    startListener();
}

private void startListener(){
    String[] urls = {url_cn,url_eu,url_us};
    for(int i=0;i<urls.length;i++){
        String url = urls[i];
        new Thread(() ->{
             MqConsumer mqConsumer1 = MqConsumer.build().serviceUrl(url).accessId(accessId).accessKey(accessKey)
                     .maxRedeliverCount(3).messageListener(message -> {
                            String jsonMessage = new String(message.getData());
                            MessageVO vo = JSON.parseObject(jsonMessage, MessageVO.class);
                            String str = AESBase64Utils.decrypt(vo.getData(), accessKey.substring(8, 24));
                            JSONObject json = (JSONObject) JSONObject.parse(str);
                            //业务逻辑部分
                            handleTuyaDevice(json);
                         }
                     );
             try {
                mqConsumer1.start();
             } catch (Exception e) {
                e.printStackTrace();
             }
         }).start();
    }
}

private void handleTuyaDevice(JSONObject json){
    String devId = json.getString("devId");
    JSONArray status = json.getJSONArray("status");
    if(null!=status){
        long t0 = System.currentTimeMillis();
        for(int i=0;i<status.size();i++){
            JSONObject item = status.getJSONObject(i);
            String code = item.getString("code");
            long t = item.getLongValue("t");
            if(Math.abs(t0-t)>1000*60){
                return;
            }
            if(item.containsKey("1")){
                boolean value = item.getBooleanValue("1");
                updateDB(devId,code,value);
                break;
            }
            if(item.containsKey("101")){
                boolean value = item.getBooleanValue("101");
                updateDB(devId,code,value);
                break;
            }
        }
    }
}

private void updateDB(String devId,String code,boolean onoff){
    System.out.println("调用数据库");
    String sql = "select devId,devType,info,road from smart_devices where devId='"+devId+"'";
    List<?> list = eicBaseDao.selectAllSql(sql);
    JSONObject json = (JSONObject) list.get(0);
    if(null!=json){
        int temp = onoff?1:0;
        String devType = json.getString("devType");
        StringBuilder sb = new StringBuilder();
        sb.append("update smart_devices ");
        if(devType.equals("switch")){
            String infostr = json.getString("info");
            JSONObject info = JSON.parseObject(infostr);
            Iterator ite = info.keySet().iterator();
            while(ite.hasNext()){
                String key = (String) ite.next();
                Object val = info.get(key);
                if(val instanceof String && code.equals(val) && key.contains("code")){
                    String str = key.replace("code", "");
                    info.put("onoff"+str, onoff);
                    break;
                }
            }
            boolean flag = true;
            Iterator ite2 = info.keySet().iterator();
            while(ite2.hasNext()){
                String key = (String) ite.next();
                if(key.contains("onoff")){
                    int val = info.getIntValue(key);
                    if(val!=temp){
                        flag = false;
                        break;
                    }
                }
            }
            sb.append("set info='");
            sb.append(info.toJSONString());
            sb.append("'");
            if(flag){
                sb.append(" and onoff=");
                sb.append(temp);
            }
        }else{
            sb.append("set onoff=");
            sb.append(temp);
        }
        sb.append(" where devId='");
        sb.append(devId);
        sb.append("'");
        eicBaseDao.executeSql(sb.toString());
    }
}
  1. } ```
  • 写回答

1条回答 默认 最新

  • zqbnqsdsmd 2019-12-20 22:19
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值