【发布时间】:2012-07-31 13:01:40
【问题描述】:
想象一下这段代码:
foo() {
Connection conn = ...;
}
foo() 已从具有注释 @Transactional 的方法中调用。如何获取当前的 JDBC 连接?请注意,foo() 在 bean 中(所以它可以有 @Autowired 字段)但foo() 不能有参数(所以我不能从某个地方传递连接)。
[编辑] 我正在使用需要数据源或连接的 jOOQ。我的问题:我不知道配置了哪个事务管理器。可以是任何东西; Java EE,基于 DataSource,通过 JNDI 获取数据源。我的代码不是应用程序,而是库。我需要吞下别人放在我盘子里的东西。同样,我无法请求 Hibernate 会话工厂,因为使用我的应用程序可能不使用 Hibernate。
但我知道其他代码,例如 Spring Hibernate 集成,可以通过某种方式从事务管理器获取当前连接。我的意思是,Hibernate 不支持 Spring 的事务管理器,因此胶水代码必须使 Spring API 适应 Hibernate 的期望。我需要做同样的事情,但我不知道它是如何工作的。
[EDIT2] 我知道有一个活动事务(即 Spring 在某处有一个 Connection 实例,或者至少有一个可以创建一个的事务管理器),但我的方法不是 @Transactional。我需要调用一个以java.sql.Connection 作为参数的构造函数。我该怎么办?
【问题讨论】:
标签: java spring jdbc connection spring-transactions