OctaviusJdbcTransactionManager
A JdbcTransactionManager that tells the truth about a transaction whose connection is already gone.
A connection can leave in the middle of a transaction: the driver aborts one whose stream is broken or that was left mid-COPY, and session.abort() does it on request. Whichever way, the pool evicts it and its proxy answers everything afterwards with a bare java.sql.SQLException carrying neither SQLState nor cause - so there is nothing left for an exception translator to recognise, and Spring's own handling turns both the commit and the rollback into TransactionSystemException: JDBC commit failed.
That matters most on the rollback path, where the rollback runs because something already went wrong: Spring logs Application exception overridden by rollback exception and the failure the caller needed to see is replaced by one about the cleanup.
The two paths are not symmetrical and are not treated as such:
Commit must raise. The commit did not happen, and saying nothing would be a claim about durability that is not true.
Rollback must not. It is already satisfied - the server discarded the transaction along with the connection - so raising over the top of it buries the real exception to report a cleanup step that had nothing left to do.
Register it in place of JdbcTransactionManager; OctaviusSpringAutoConfiguration does when the application declares no transaction manager of its own.