Изключение за счупена тръба в приложението Dropwizard

Получавам изключение „счупена тръба“, когато сървърът е оставен да работи дълго време без никакви http заявки. При известно разследване открих, че това изключение възниква, защото сървърът затваря връзката си с базата данни и възниква, когато клиент поиска ресурси, когато връзката е затворена. За да поправя това, добавих следното към URL адреса на jdbc връзката

?autoReconnect=true

Също така увеличих паметта на купчината на машината за всеки случай. Освен това няма много http клиенти, изискващи ресурси от този dropwizard сървър. Има ли нещо друго, което може да се случи?

Съобщението за грешка за справка

You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.

Има ли начин да конфигурирам набор от връзки в приложението dropwizard? Или е добра практика да промените свойството 'interactive-timeout' и 'wait_timeout' на mysqld да бъде повече от 8 часа?


person user_mda    schedule 06.04.2015    source източник


Отговори (2)


Благодаря за помощта, поправих този проблем, като добавих следното към файла yaml

  1. checkConnectionWhileIdle: true
  2. checkConnectionOnReturn: true
  3. checkConnectionOnBorrow: true

И се уверете, че всички транзакции са ангажирани, върнати в случай на изключения и сесиите са затворени след употреба.

person user_mda    schedule 14.04.2015

В зависимост от това дали използвате JDBi, Hibernate или нещо друго, препоръчвам да използвате предоставените пакети за настройка на свързаност. Тези пакети идват с вграден пул, който лесно се конфигурира, както трябва да показват примерите във връзките.

Ако използвате обикновен JDBC или друг OR картограф, винаги можете да напишете Управляван обект или подходящ пакет сами, или опитайте да използвате ManagedPooledDatasource директно по време на стартиране.

person Ralf    schedule 14.04.2015