1

我们的 webapps 目前直接对我们的 Oracle 数据库进行 JDBC 调用。我们在静态 getConnection(String client) 方法中使用对 DBMS_APPLICATION_INFO 包的调用来标记每个连接,例如

CallableStatement pstmt = conx.prepareCall("{call DMBS_APPLICATION_INFO.SET_CLIENT_INFO(?)}");
pstmt.setString(1, "my client");
pstmt.executeUpdate();

这有时被证明是有用的,当我们切换到 Spring JDBC 时,我们希望继续这样做。

我认为如果我们将每个查询都设为事务,然后在执行查询(或多个查询)之前调用 DBMS_APPLICATION_INFO,这将起作用,但这需要将上述代码添加到我们现在获得连接的每个地方。在事务之外,这似乎是不可能的,因为 Spring JDBC 会打开和关闭每个查询的连接。

在 Spring JDBC 中,有没有办法像我们现在一样在后台调用 DBMS_APPLICATION_INFO,传递一个用来标记连接的字符串?

谢谢!

4

3 回答 3

0

你看过Spring Aspects吗?

于 2011-01-06T22:25:01.470 回答
0

我的问题的答案是否定的。如果我今天要解决这个问题,我可能会考虑为 Tomcat 的 JDBC 池编写一个拦截器或包装驱动程序。但实际上,我很可能会放弃使用 DBMS_APPLICATION_INFO。虽然很高兴它在操作上没有用,但不值得添加代码和复杂性。

于 2014-08-18T02:02:24.513 回答
0

也许是因为你写DMBS_APPLICATION_INFO而不是DBMS_APPLICATION_INFO(注意“D MB S”而不是“D BM S”)。

于 2020-06-25T15:33:03.210 回答