【问题标题】:Can't achieve working with p6Spy无法使用 p6Spy
【发布时间】:2015-07-10 09:30:08
【问题描述】:

我尝试了两种方法将 p6Spy 功能添加到我的 spring 使用的项目中。

路线一,

http://templth.blogspot.com.tr/2004/11/integrate-p6spy-with-spring.html 我用com.p6spy.engine.spy.P6SpyDriver 更改了我的驱动程序,并将realdriver realdriver=com.ibm.db2.jcc.DB2Driver 添加到spy.properties 文件中。

但不知何故,我的 realdriver 在 p6spy 之前注册 驱动程序 com.ibm.db2.jcc.DB2Driver 是 spy.properties 中的真正驱动程序,但它已在 p6spy 之前加载。 p6spy 不会包装这些连接。要么阻止驱动程序加载,要么尝试在 spy.properties 中将 'deregisterdrivers' 设置为 true

使用:p6spy: 前缀对我不起作用。它说无法与该网址建立连接。

所以,我选择在属性文件中设置这个 deregisterdrivers=true。 这次我在日志文件中获取 sql 但无法执行 sqls。我可以在另一个 sql 编辑器中执行 sql。似乎真正的联系消失了,而虚拟的联系出现了。

路线二, 我们使用弹簧。所以我试过这个方法。将数据源明确地提供给 p6Spy。但是这次 spring 抱怨了多个 java.sql.DataSource 实例。 com.firm.BasicDataFill 和 com.p6spy.engine.spy.P6DataSource 都实现了 DataSource。 Spring 无法获取单例。

http://templth.blogspot.com.tr/2004/11/integrate-p6spy-with-spring.html

<bean id="dataSource" lazy-init="true"
    class="com.firm.BasicDataFill">
    <property name="driverClassName" value="${database.connection.driver_class}" />
    <property name="username" value="${database.connection.username}" />
    <property name="password" value="${database.connection.password}" />
    <property name="url" value="${database.connection.url}" />
       ...
    <property name="accessToUnderlyingConnectionAllowed" value="true" />                                
</bean>

<!-- bean id="myDataSource" class="com.p6spy.engine.spy.P6DataSource">
    <constructor-arg>
        <ref local="dataSource"/>
    </constructor-arg>
</bean-->

最后,我发现 p6spy v1.3 和 2.4.1 的设置不同。您对基于弹簧的应用程序有什么建议吗?

【问题讨论】:

标签: java spring p6spy


【解决方案1】:

我建议从最新版本的 P6Spy 2.x 开始。您还应该将 spy.properties 文件替换为 2.X 的默认版本,该版本记录在 here 中。根据您的应用程序服务器,您可能需要在 spy.properties 中设置“realdriver”设置以包含“com.ibm.db2.jcc.DB2Driver”。但是,只有在您使用的应用程序服务器阻止了 JDBC 驱动程序的自动注册时才需要这样做。

要在 Spring 中使用 P6Spy,最简单的方法是使用 P6SpyDataSource 包装您当前的数据源 bean,如 here 所述。该答案中的示例显示了一个被包装的 JNDI 数据源,但它可用于包装任何数据源。注意:如果你封装的数据源是P6SpyDataSource,你不需要修改JDBC URL。

如果您仍然遇到问题,请在您的问题中添加更多信息。以下信息将有助于排除故障:

  1. 正在使用的 P6Spy 版本
  2. spy.properties 的内容
  3. 数据源的定义(包括应用服务器配置,如果 使用 JNDI)
  4. 正在使用的应用服务器类型和版本
  5. Stacktrace 包含您可能收到的任何错误。

【讨论】:

    【解决方案2】:

    看看 Log4jdbc 它会完成这项工作https://code.google.com/p/log4jdbc/

    【讨论】:

    • 感谢您的建议。我会检查这个。我们使用 Java 1.7 :)
    • 感谢分享,但我无法与 DB2 建立联系。
    • 让我有点不同意,比较两个项目的提交活动对于 p6spy 来说听起来像是一个明显的胜利,请参阅:github.com/p6spy/p6spy/commits/master vs github.com/arthurblake/log4jdbc/commits/master(最后一个涉及 log4jdbc 提交的代码来自:27.12 .2012)
    • 谢谢@PeterButkovic 无论我在哪里看,我都会首先看到 p6spy。
    • 我的错误,我最后一次检查 P6Spy 是 1.x 版本,它没有随着 JDBC 规范发展。我确实错过了 2.x 版本。我现在是 1.3 补丁版本的用户。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    • 2018-02-25
    • 2013-07-18
    • 1970-01-01
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多