I haven't looked into it in detail, but I see you're using <bean id="dataSource" destroy-method="" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> … without a connection pool. The default one is very basic and not optimized. 'Hanging' is exactly what could happen then when doing lots of async things. Add a connection pool like c3p0, dbcp, Hikari, etc.