java - Spring-data-jpa 剛保存的信息查找不到
問(wèn)題描述
1 后臺(tái)結(jié)構(gòu)后臺(tái)的結(jié)構(gòu)是 SpringMVC, Spring, jpa(HibernateJpaDialect),DataSource(c3p0), Mysql(InnoBDB), transactionManager(JpaTransactionManager)。
2 問(wèn)題環(huán)境@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(); //添加信息到消息隊(duì)列中try { Sender sender = new SenderImpl(); sender.getGPSFromBaiduAPI('jdjs', spotId, entity.getDizhi());} catch (InterruptedException e) { return false;} return spotId;}catch (Exception e){ return false;} }
以上是保存的部分,并把得到的 ID 發(fā)送到消息隊(duì)列中,下邊是消息隊(duì)列的處理部分
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());、、運(yùn)行到這里就直接卡住了,如果注釋掉查詢,其他的調(diào)用皆正常。Map<String, Object> 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 問(wèn)題描述
前端調(diào)用 addScenicSpot() 方法,會(huì)將信息保存到數(shù)據(jù)庫(kù)中,然后將保存之后的數(shù)據(jù)控中的ID發(fā)送到消息隊(duì)列中,然后訂閱者處理隊(duì)列中的信息,根據(jù) ID 查詢到剛保存的信息,然后調(diào)用外部接口查詢到經(jīng)緯度,并將得到的經(jīng)緯度存儲(chǔ)到數(shù)據(jù)庫(kù)中?,F(xiàn)在的問(wèn)題是,保存信息正常,但是到了訂閱者處理這邊,根據(jù)得到的 ID 查找不到保存的信息。
4 猜測(cè)問(wèn)題所在產(chǎn)生bug的原因是spring事務(wù)提交晚于消息隊(duì)列的生產(chǎn)消息,導(dǎo)致消息隊(duì)列消費(fèi)消息時(shí)獲取到的數(shù)據(jù)不正確,靈感來(lái)自于這里:http://www.cnblogs.com/taocon...
問(wèn)題解答
回答1:同步調(diào)用,改為異步調(diào)用?
@AsyncgetGPSFromBaiduAPI
回答2:已經(jīng)解決了問(wèn)題了,應(yīng)用的這里的方法:http://www.cnblogs.com/taocon...
相關(guān)文章:
1. php多任務(wù)倒計(jì)時(shí)求助2. 數(shù)組排序,并把排序后的值存入到新數(shù)組中3. mysql 遠(yuǎn)程連接出錯(cuò)10060,我已經(jīng)設(shè)置了任意主機(jī)了。。。4. 網(wǎng)頁(yè)爬蟲(chóng) - python 爬取網(wǎng)站 并解析非json內(nèi)容5. 默認(rèn)輸出類型為json,如何輸出html6. python的正則怎么同時(shí)匹配兩個(gè)不同結(jié)果?7. mysql怎么表示兩個(gè)字段的差8. win10 python3.5 matplotlib使用報(bào)錯(cuò)9. PHP訂單派單系統(tǒng)10. MySQL的聯(lián)合查詢[union]有什么實(shí)際的用處
