我在spring上下文中初始化了datasource bean。我想知道应该采用什么方式?为什么我只是不能写dataSource.getConnection()?
答案 0 :(得分:15)
有一个重要区别:dataSource.getConnection()
始终返回从dataSource或连接池获取的新连接。 DataSourceUtils.getConnection()
检查当前线程是否存在活动事务。如果有,它将返回与此事务的连接。如果没有,它的行为方式与dataSource.getConnection()
完全相同。
使用DataSourceUtils.getConnection()
时需要小心。如果它返回活动事务的连接,则意味着其他人将关闭它,因为它是谁打开事务的责任。另一方面,如果它从dataSource返回一个全新的连接,那么你应该提交/回滚/关闭它。
答案 1 :(得分:2)
DataSourceUtils#getConnection()
非常清楚地说明了为什么你可能想要使用它:特别是,它使用Spring JDBC异常层次结构而不是原始SQL异常,它将参与Spring的事务管理工具。如果您不需要这两个功能中的任何一个,则可以使用DataSource#getConnection()
并继续使用您的代码。