【问题标题】:Using Oracle's DBMS_APPLICATION_INFO package with Spring JDBC将 Oracle 的 DBMS_APPLICATION_INFO 包与 Spring JDBC 一起使用
【发布时间】:2011-01-06 21:49:28
【问题描述】:

我们的 web 应用程序目前直接对我们的 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,传递一个用来标记连接的字符串?

谢谢!

【问题讨论】:

    标签: oracle spring jdbc connection spring-jdbc


    【解决方案1】:

    你研究过 Spring Aspects 吗?

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        可能是因为您写的是DMBS_APPLICATION_INFO 而不是DBMS_APPLICATION_INFO(注意“DMBS”而不是“DBMS”)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-01-05
          • 1970-01-01
          • 2015-01-25
          • 1970-01-01
          • 2018-10-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多