As far as I understood DataSourceTransactionManager binds a JDBC connection from the specified DataSource to the current thread, allowing for one thread-bound Connection per DataSource. If it's a pool of connections, it will take one of the available connections.
After this if I use JdbcTemplate inside a transaction, it will capture a connection binded by DataSourceTransactionManager. Do I understand the mechanism correctly? A there any requirements for making transaction manager bean definition (i.e. singleton)?