曲不成歌 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 flink cdc无法实时同步mysql数据
  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名