Hello Marc,
In our case we found that in one place the connection is not closed. Spring DataSourceUtils.getConnection was called and developers missed to close the connection by calling DataSourceUtils.releaseConnection.
We replaced that call with Spring JDBCTemplate which took care of closing the resources.
We then increased the max pool size, as all the connections are busy due to long running transactions and not released immediately.
In your case whether all connections are taking too much time to get released?