我们在项目中使用Oracle连接池机制,因为我们的应用程序使用了一些oracle特定的功能。
我们的数据源在jetty.xml中的配置如下:
<Call name="addService">
<Arg>
<New class="org.mortbay.jetty.plus.DefaultDataSourceService">
<Set name="Name">DataSourceService</Set>
<Call name="addDataSource">
<Arg>app_ds</Arg><!--java:comp/env-->
<Arg>
<New class="oracle.jdbc.pool.OracleConnectionPoolDataSource">
<Set name="description">xxxx</Set>
<Set name="user">xxx</Set>
<Set name="password">xxxx</Set>
<Set name="loginTimeout">xxx</Set>
<Set name="URL">jdbc:oracle:thin:@localhost:1521:xxx</Set>
</New>
</Arg>
</Call>
<Call name="start"/>
</New>现在,我们如何将此数据源与P6Spy集成,以便P6Spy可以将所有SQL语句打印到控制台上?
我以前在spring的DriverManagerDataSource等其他数据源中使用过P6spy,在其他数据源中使用过
(Tomcat中)
Resource name="jdbc/test" auth="Container"
type="javax.sql.DataSource" driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@xxx"
username="xxx" password="xxx" maxActive="65" maxIdle="10"
maxWait="-1" removeAbandoned="true"/>..etc。
所有这些数据源都以driverClassName作为参数,我们可以在其中提供"com.p6spyengine.spy.P6SpyDriver“代替"oracle.jdbc.driver.OracleDriver”,并在spy.properties中提供真实的驱动程序名称。一切都运行得很好。
但在oracle.jdbc.pool.OracleConnectionPoolDataSource,中,没有名为driverClassName的属性来提供代理驱动程序。
在这种情况下,我如何将P6Spy与它集成?
请帮帮我。
提前感谢,奎师那五世
发布于 2013-09-09 16:19:20
根据我使用Glassfish的经验,我建议:
one)用作真实数据源的代理
定义如下:
<Call name="addService">
<Arg>
<New class="org.mortbay.jetty.plus.DefaultDataSourceService">
<Set name="Name">DataSourceService</Set>
<Call name="addDataSource">
<Arg>p6spy_ds</Arg><!--java:comp/env -->
<Arg>
<New class="com.p6spy.engine.spy.P6DataSource">
<!-- properties would be irrelevant here -->
<Set name="description">xxxx</Set>
<Set name="user">xxx</Set>
<Set name="password">xxxx</Set>
<Set name="loginTimeout">xxx</Set>
<Set name="URL">jdbc:oracle:thin:@localhost:1521:xxx</Set>
</New>
</Arg>
</Call>
<Call name="start" />
</New>spy.properties文件中的真实文件使用:
realdatasource=jdbc/app_ds # assuming that app_ds is your real datasourceproxy_ds,以确保使用它(如果引用它的成本太高,您始终可以调用与原始数据源相同的代理数据源,并将原始数据源重命名+在spy.properties配置文件中引用新名称)发布于 2013-12-21 02:10:34
使用Jetty,添加P6Spy实际上会更容易一些。P6Spy有一个通过构造函数参数接受另一个数据源的P6DataSource。到目前为止,这是设置P6Spy的最简单方法。
<Call name="addService">
<Arg>
<New class="org.mortbay.jetty.plus.DefaultDataSourceService">
<Set name="Name">DataSourceService</Set>
<Call name="addDataSource">
<Arg>app_ds</Arg><!--java:comp/env-->
<Arg>
<New class="com.p6spy.engine.spy.P6DataSource">
<Arg>
<New class="oracle.jdbc.pool.OracleConnectionPoolDataSource">
<Set name="description">xxxx</Set>
<Set name="user">xxx</Set>
<Set name="password">xxxx</Set>
<Set name="loginTimeout">xxx</Set>
<Set name="URL">jdbc:oracle:thin:@localhost:1521:xxx</Set>
</New>
</Arg>
</New>
</Arg>
</Call>
<Call name="start"/>
</New>https://stackoverflow.com/questions/13450067
复制相似问题