The problem was self-inflicted (as most are). My data source was configured in my webapp's web.xml and I was referencing it via JNDI. I now create my data source as shown in the Spring reference doc (section 13.3.1) and the
destroy method takes care of closing the data source and pool.
If I'd been required to stick with a JNDI data source I would have had to close out the data source in a class that implements
ServletContextListener, in the