java - Spring-data-jpa Die gerade gespeicherten Informationen können nicht gefunden werden
扔个三星炸死你
扔个三星炸死你 2017-06-12 09:25:28
0
2
1289

1 Backend-Struktur

Die Hintergrundstruktur ist SpringMVC, Spring, jpa(HibernateJpaDialect),
DataSource(c3p0), Mysql(InnoBDB),
transactionManager(JpaTransactionManager).

2 Problemumgebung

@Transactional(value = "transactionManager", isolation = Isolation.READ_UNCOMMITTED) public Object addScenicSpot(int tourGuideID, String jsonStr) { Djd_js entity = new Djd_js(); try{ _setEntity(entity, jsonStr); entity.setDaoyouID(tourGuideID); jdjsDao.save(entity); int spotId = entity.getId(); //添加信息到消息队列中 try { Sender sender = new SenderImpl(); sender.getGPSFromBaiduAPI("jdjs", spotId, entity.getDizhi()); } catch (InterruptedException e) { return false; } return spotId; }catch (Exception e){ return false; } }
以上是保存的部分,并把得到的 ID 发送到消息队列中,下边是消息队列的处理部分
public boolean updateLngAndLat(MessageVo messageVo) { System.out.println("CreateTime--------"+messageVo.getCreateDate()); System.out.println("Address--------"+messageVo.getContent()); System.out.println("Id--------"+messageVo.getId()); Djd_js entity = jdjsDao.findOne(messageVo.getId()); System.out.println("entity-Address--------"+entity.getDizhi()); 、、运行到这里就直接卡住了,如果注释掉查询,其他的调用皆正常。 Map result = LngAndLatUtil.getLngAndLat(((MessageVo) messageVo).getContent()); System.out.println("result--------"+(int)result.get("result")); if (1 == (int)result.get("result")){ entity.setJingdu(Double.valueOf(result.get("lng").toString())); entity.setWeidu(Double.valueOf(result.get("lat").toString())); System.out.println("message-------------------------------"+"lng:"+Double.valueOf(result.get("lng").toString())+", lat:"+Double.valueOf(result.get("lat").toString())); jdjsDao.updateLngAndLatBySenciSpotID(messageVo.getId(), (Double) result.get("lng"), (Double) result.get("lat")); }else { System.out.println("message-------------------------------False"); } return false; }

3 Problembeschreibung

Das Frontend ruft die Methode addScenicSpot() auf, um die Informationen in der Datenbank zu speichern, und sendet dann die ID im gespeicherten Datensteuerelement an die Nachrichtenwarteschlange. Anschließend verarbeitet der Abonnent die Informationen in der Warteschlange und fragt die gerade gespeicherten Informationen ab Rufen Sie dann die externe Schnittstelle auf, um den Längen- und Breitengrad abzufragen und den erhaltenen Längen- und Breitengrad in der Datenbank zu speichern.
Das Problem besteht nun darin, dass das Speichern von Informationen normal ist, aber wenn es um die Abonnentenverarbeitung geht, können die gespeicherten Informationen anhand der erhaltenen ID nicht gefunden werden.

4 Erraten Sie das Problem

Der Grund für den Fehler liegt darin, dass die Übermittlung der Frühjahrstransaktion später erfolgt als die Produktionsnachricht der Nachrichtenwarteschlange, was zu falschen Daten führt, wenn die Nachrichtenwarteschlange Nachrichten verbraucht.
Die Inspiration kommt von hier: http://www.cnblogs. com/taocon...

扔个三星炸死你
扔个三星炸死你

Antworte allen (2)
迷茫

同步调用,改为异步调用?

@Async
getGPSFromBaiduAPI

    扔个三星炸死你

    已经解决了问题了,应用的这里的方法:http://www.cnblogs.com/taocon...

      Neueste Downloads
      Mehr>
      Web-Effekte
      Quellcode der Website
      Website-Materialien
      Frontend-Vorlage
      Über uns Haftungsausschluss Sitemap
      Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!