Изглежда, че MySQL или защитна стена убива вашите неактивни връзки, които се мотаят във вашия пул за връзки jdbc за дълги периоди от време:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet successfully received from the server was 4,665,488 milliseconds ago.
Проверете стойността на wait_timeout на MySQL.
Можете да си поиграете с Настройки на DBCP напр. validationQuery, testOnBorrow и testWhileIdle.
Конфигурация, която е "колан и скоби" и вероятно ще реши проблема ви за сметка на производителността е:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="validationQuery" value="SELECT 1"/>
<property name="testOnBorrow" value="true"/>
</bean>
Горното ще тества връзките всеки път, когато вземете заем от пула.