2016-03-30 17 views
0

Bazı özel sorunlarla karşılaştım: Dinlenme denetleyicim, neden bir istekte bulunduğumu bilmediğimden birkaç saat çalışıyor. Cevap vermiyor. Tarayıcıda yükleme işlemi bir süreliğine cevap beklemekte. POSTER ile istek gönderirim, bu isteğin denetleyiciye gittiğini ancak yanıt alınmadığını görebiliyorum. Uygulamada hata ayıklamaya çalıştım, planlanmış işlenmiş işlerim var - çalışıyorlar. Fakat denetleyici değil. İstek denetleyiciye ulaşmıyor. Daha önce sıkışmış. Bunun nerede olduğunu nasıl bulabilirim? Teşekkür ederim.Spring MVC Denetleyici sıkışmış ve yanıt vermiyor

@RestController 
@RequestMapping("/quotes") 
public class QuotesController { 

private final QuotesService quotesService; 

@Autowired 
public QuotesController(QuotesService quotesService) { 
    this.quotesService = quotesService; 
} 

@RequestMapping(value="", method= RequestMethod.GET, produces = "application/json; charset=utf-8") 
public ResponseEntity<List<LoadedFileInfo>> getLoadedFilesData(){ 
    List<LoadedFileInfo> result = quotesService.getLoadedFilesData(); 
    return new ResponseEntity<List<LoadedFileInfo>>(result, HttpStatus.OK); 
} 

@RequestMapping(value="/currencyPairs", method= RequestMethod.GET, produces = "application/json; charset=utf-8") 
public ResponseEntity<List<CurrencyPair>> getCurrencyPairs(){ 
    return new ResponseEntity<List<CurrencyPair>>(quotesService.getCurrencyPairs(), HttpStatus.OK); 
} 

@RequestMapping(value="/oneMinute", method= RequestMethod.GET, produces = "application/json; charset=utf-8") 
public ResponseEntity<List<Number[]>> getOneMinuteQuotes(@RequestParam @DateTimeFormat(iso= DateTimeFormat.ISO.DATE_TIME) LocalDateTime from, @RequestParam @DateTimeFormat(iso= DateTimeFormat.ISO.DATE_TIME) LocalDateTime to, @RequestParam Integer currencyPair){ 
    return new ResponseEntity<List<Number[]>>(quotesService.getOneMinuteQuotes(from, to, currencyPair), HttpStatus.OK); 
} 

@RequestMapping(value="/fiveMinutes", method= RequestMethod.GET, produces = "application/json; charset=utf-8") 
public ResponseEntity<List<Number[]>> getFiveMinutesQuotes(@RequestParam @DateTimeFormat(iso= DateTimeFormat.ISO.DATE_TIME) LocalDateTime from, @RequestParam @DateTimeFormat(iso= DateTimeFormat.ISO.DATE_TIME) LocalDateTime to, @RequestParam Integer currencyPair){ 
    return new ResponseEntity<List<Number[]>>(quotesService.getFiveMinuteQuotes(from, to, currencyPair), HttpStatus.OK); 
} 

@RequestMapping(value="/fifteenMinutes", method= RequestMethod.GET, produces = "application/json; charset=utf-8") 
public ResponseEntity<List<Number[]>> getFifteenMinutesQuotes(@RequestParam @DateTimeFormat(iso= DateTimeFormat.ISO.DATE_TIME) LocalDateTime from, @RequestParam @DateTimeFormat(iso= DateTimeFormat.ISO.DATE_TIME) LocalDateTime to, @RequestParam Integer currencyPair){ 
    return new ResponseEntity<List<Number[]>>(quotesService.getFifteenMinuteQuotes(from, to, currencyPair), HttpStatus.OK); 
} 

@RequestMapping(value="/thirtyMinutes", method= RequestMethod.GET, produces = "application/json; charset=utf-8") 
public ResponseEntity<List<Number[]>> getThirtyMinutesQuotes(@RequestParam @DateTimeFormat(iso= DateTimeFormat.ISO.DATE_TIME) LocalDateTime from, @RequestParam @DateTimeFormat(iso= DateTimeFormat.ISO.DATE_TIME) LocalDateTime to, @RequestParam Integer currencyPair){ 
    return new ResponseEntity<List<Number[]>>(quotesService.getThirtyMinuteQuotes(from, to, currencyPair), HttpStatus.OK); 
} 

@RequestMapping(value="/oneHour", method= RequestMethod.GET, produces = "application/json; charset=utf-8") 
public ResponseEntity<List<Number[]>> getOneHourQuotes(@RequestParam @DateTimeFormat(iso= DateTimeFormat.ISO.DATE_TIME) LocalDateTime from, @RequestParam @DateTimeFormat(iso= DateTimeFormat.ISO.DATE_TIME) LocalDateTime to, @RequestParam Integer currencyPair){ 
    return new ResponseEntity<List<Number[]>>(quotesService.getOneHourQuotes(from, to, currencyPair), HttpStatus.OK); 
} 

@RequestMapping(value="/fourHours", method= RequestMethod.GET, produces = "application/json; charset=utf-8") 
public ResponseEntity<List<Number[]>> getFourHourQuotes(@RequestParam @DateTimeFormat(iso= DateTimeFormat.ISO.DATE_TIME) LocalDateTime from, @RequestParam @DateTimeFormat(iso= DateTimeFormat.ISO.DATE_TIME) LocalDateTime to, @RequestParam Integer currencyPair){ 
    return new ResponseEntity<List<Number[]>>(quotesService.getFourHourQuotes(from, to, currencyPair), HttpStatus.OK); 
} 

@RequestMapping(value="/oneDay", method= RequestMethod.GET, produces = "application/json; charset=utf-8") 
public ResponseEntity<List<Number[]>> getOneDayQuotes(@RequestParam @DateTimeFormat(iso= DateTimeFormat.ISO.DATE_TIME) LocalDateTime from, @RequestParam @DateTimeFormat(iso= DateTimeFormat.ISO.DATE_TIME) LocalDateTime to, @RequestParam Integer currencyPair){ 
    return new ResponseEntity<List<Number[]>>(quotesService.getOneDayQuotes(from, to, currencyPair), HttpStatus.OK); 
} 

@RequestMapping(value="/oneWeek", method= RequestMethod.GET, produces = "application/json; charset=utf-8") 
public ResponseEntity<List<Number[]>> getOneWeekQuotes(@RequestParam @DateTimeFormat(iso= DateTimeFormat.ISO.DATE_TIME) LocalDateTime from, @RequestParam @DateTimeFormat(iso= DateTimeFormat.ISO.DATE_TIME) LocalDateTime to, @RequestParam Integer currencyPair){ 
    return new ResponseEntity<List<Number[]>>(quotesService.getOneWeekQuotes(from, to, currencyPair), HttpStatus.OK); 
} 

@RequestMapping(value="/oneMonth", method= RequestMethod.GET, produces = "application/json; charset=utf-8") 
public ResponseEntity<List<Number[]>> getOneMonthQuotes(@RequestParam @DateTimeFormat(iso= DateTimeFormat.ISO.DATE_TIME) LocalDateTime from, @RequestParam @DateTimeFormat(iso= DateTimeFormat.ISO.DATE_TIME) LocalDateTime to, @RequestParam Integer currencyPair){ 
    return new ResponseEntity<List<Number[]>>(quotesService.getOneMonthQuotes(from, to, currencyPair), HttpStatus.OK); 
} 

}

+0

Öyle ya da sadece bir tane yardımcı olabilir farz ettik gibi analiz her türlü denemedim beri? Günlüklerde herhangi bir hata görüyor musunuz? Bir iş parçacığı denedin mi? Üzerinde bir visualVM bağladınız mı? Hangi uygulama sunucusu? –

+0

Bu bir SpringBoot. Tek bir kontrol cihazım var. Günlüklerlerde hata yok.Thread dökümü denemedim ve visualVM – migAlex

+0

bağlanmadım REST için oluşturduğunuz Controller kodunu gönderir misiniz. – srinivas

cevap

0

Ben senin Denetleyici ile yanlış bir şey olduğunu düşünmüyorum, en azından verilen kodda bunun için kanıt yoktur: Bu benim denetleyicisi sınıftır. , burada yanlış gidebilir birkaç isim ne bir sürü neden vardır:

  • HTTP Bağlantı Pool dolu uygulamanız bir bağlantı havuzu vardır çalışan bir web sunucusu - Mevcut HTTP bir dizi bağlantıları. Eşzamansız bir şey kullanmıyorsanız (sanmıyorum), havuzun paralel olarak çalışan ve denetleyiciye erişmeye çalışan çok sayıda bağlantıyla boğulması mümkündür.

    Her şeyden önce, bağlantı havuzunun tamam olup olmadığını kontrol edin, genellikle bağlantı havuzları bir tür yönetim sunar. Örneğin, Tomcat'da bunun için bir JMX vardır), örneğin jconsole ile giriş yapın ve birçok serbest bağlantı olduğundan emin olun.

  • Bazen bir ağ sorunu var Bunu anlamak gerçekten kolay. Denetleyicinizin en başında bazı izleme iletileri ekleyin ve bunları günlüğe kaydedin. Ardından, günlüğü kontrol edin ve her isteğin üzerine yeni bir mesaj görüp görmediğinize bakın, eğer yaparsanız, kod uygun şekilde çağrılır.

  • kusur, yardım edebilir yine akışını (tamamlamak için denetleyici yöntemi için yaş alır görüyoruz başında günlükleri ile iz ve denetleyici yönteminin sonunda gereken bu durumda uygulamanın kendisinden içindedir). Yani, bunu kanıtlamak için bir iş parçacığı dökümü almayı düşünün. Bunu yapmanın birçok yolu vardır, örneğin: eğer linux üzerinde iseniz, java işleminizde kill -3'u çalıştırın, alternatif olarak jstack'i kullanabilirsiniz, bu yüzden sadece sizin için en uygun olanı bulun. Neyse, bir iş parçacığı dökümü, uygulamanızın aldığınız zaman nerede sıkıştığını göstermelidir. Eğer şanslı bir :) Uygulamayı profil ve nerede anlayabileceği itibaren

konum - sen alır Yani eğer kontrolör yürütülmesinden sorumlu iplik aynı yerde takılı kaldığını görüyorum iki kez ve yine söylemek tam olarak zaman harcanıyor, ama bu "çevrimdışı" yapılmalı, inanıyorum ve bir üretim makinesinde değil. Bu cevap çok basit geliyor, ama eğer

üzüldüm gerçekten böyle bir açıklama

tüm denetleyicileri için
+0

Bu açıklama için teşekkür ederiz. Bir sürü faydalı bilgi var. Analiz etmeyi ve kullanmayı deneyeceğim. teşekkür ederim – migAlex

İlgili konular