【问题标题】:Usage of P6Spy with datasource in Spring applicationContext.xml在 Spring applicationContext.xml 中使用 P6Spy 和数据源
【发布时间】:2013-01-20 06:59:16
【问题描述】:

我使用 Hibernate 4、Spring 3、JSF 2.0 和 Weblogic 10.3.6 作为服务器。

我在 Weblogic 服务器上创建了数据源,在 applicationContext.xml 中我将数据源定义为

<!-- Data Source Declaration -->    
    <bean id="DataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="jdbc/​myDS"/>   
</bean>

如果我想使用 P6Spy 来记录 SQL 参数,我应该如何以及在何处在 applicationcontext.xml 中添加以下内容?

  <property name="hibernate.connection.driver_class">com.p6spy.engine.spy.
  P6SpyDriver</property>

任何帮助都是非常值得赞赏的。

谢谢

【问题讨论】:

  • 官方文档有帮助吗? p6spy.github.io/p6spy/install.html Websphere 版本可能已经过时,但信息可能仍然相关。
  • @PeterButkovic Websphere 中提到的任何东西都应该在 Websphere 应用服务器中配置,不是吗?
  • 我猜,我错过了你的意思。你的意思是?从我的角度来看,您需要做的就是创建新的数据源(p6spy 之一),该数据源稍后将代理真实的数据源(jdbc/​myDS)。而 applicationcontext.xml 只会引用 p6spy 之一。我猜应该是这样。

标签: java spring hibernate logging p6spy


【解决方案1】:

使用 spring 集成 p6spy 最简单的方法是使用 P6DataSource 类。 P6DataSource 类只是真实数据源的代理。这使您可以使用任何 spring 数据源工厂实现来获取真实的数据源。

<bean id="dataSource" class="com.p6spy.engine.spy.P6DataSource">
  <constructor-arg>
    <bean id="DataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
      <property name="jndiName" value="jdbc/​myDS"/>   
    </bean>
  </constructor-arg>
</bean>

如果您使用的是 XADatasource,只需将类名更改为 P6ConnectionPoolDataSource,如下所示。注意:P6ConnectionPoolDataSource 实现了 ConnectionPoolDataSource 和 XADataSource 接口。

<bean id="dataSource" class="com.p6spy.engine.spy.P6ConnectionPoolDataSource">
  <constructor-arg>
    <bean id="DataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
      <property name="jndiName" value="jdbc/​myDS"/>   
    </bean>
  </constructor-arg>
</bean>

【讨论】:

  • 正确,您需要使用 P6ConnectionPoolDataSource 来支持 XA。我已经更新了我的答案以包含这些信息。
【解决方案2】:

你需要在applicationContext.xml文件中创建会话工厂的bean,如下:

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource">
            <ref bean="dataSource" />
        </property>
    </bean>
    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.p6spy.engine.spy.
  P6SpyDriver" />
        <property name="url" value="jdbc\:mysql\://localhost\:3306/testdb" />
        <property name="username" value="my_username" />
        <property name="password" value="my_password" />
    </bean>

有关 P6Spy 库的更多信息,请参阅:http://www.mkyong.com/hibernate/how-to-display-hibernate-sql-parameter-values-solution/。

我们可以省略“dataSource” bean,直接写属性。参考:how to configure hibernate config file for sql server

【讨论】:

  • 如果jndi数据源用于数据库连接,那么为什么需要在applicationContext.xml中硬编码用户名和密码以及其他数据库连接细节?
猜你喜欢
  • 1970-01-01
  • 2012-10-01
  • 2011-03-30
  • 1970-01-01
  • 2016-05-19
  • 1970-01-01
  • 1970-01-01
  • 2011-04-08
相关资源
最近更新 更多