У меня есть пул соединений с базой данных. Есть потребители, которые берут связь из этого пула.
Но я не могу доверять этим потребителям, потому что многие из них не возвращают мою связь обратно. Следовательно, бассейн голодает, и многие потребители вынуждены ждать бесконечности.
например:
class Consumer{
void someMethod(){
Connection con=Pool.getConnection();
//some bloody steps which throws exception
con.goodBye();//giving back the connection to the pool
}
}
Из-за исключения и, возможно, из-за высокомерия, соединение не всегда возвращается. У меня нет возможности ограничить использование Pool api в классе потребителей.
Как я могу вернуть соединение? (У меня нет способа заставить Потребителя)
Я считаю, что для этого нет надежного решения (может быть, я не такой умный). Тем не менее, любой может придумать довольно хорошее решение.
Одно из решений, которое я получил, - это проверка того, возникает ли какое-либо исключение в классе Consumer, и если возникает исключение, то полностью возвращаем силу соединения.
Или есть какой-то новый революционный шаблон проектирования DBPool, который не очень популярен для этого типа типичных сценариев (хотя я думаю, что мой случай очень общий, любой может забыть вернуть соединение обратно в пул.)