2

準備済みステートメントを使用してデータベース内のテーブルを更新するプログラムがあり、実装されているすべての SQL ステートメントの出力を確認しようとしています。

私の調査では、見栄えの良いP6Spyが示唆されました。ダウンロードし、ライブラリにP6Spy.jarを依存関係として追加し、spy.propertiesファイルに変更して、Oracleドライバーをリアルドライバーとして使用するように接続し、spy.propertiesをクラスパスに追加しました、そして私のコードでドライバーを「com.p6spy.engine.spy.P6SpyDriver」に変更しました。

それはすべて機能し、spy.log ファイルが生成されますが、SQL ステートメントは含まれていません。代わりに、spy.log ファイルの出力は次のようになります。

1374244954573|-1||debug||com.p6spy.engine.common.P6SpyOptions reloading properties
1374244954578|-1||info||Using properties file: C:\Users\gboss\logging\spy.properties
1374244954579|-1||info||No value in environment for: getStackTrace, using: false
1374244954579|-1||info||No value in environment for: getDeregisterDrivers, using: false
1374244954579|-1||info||No value in environment for: getUsePrefix, using: false
1374244954579|-1||info||No value in environment for: getExecutionThreshold, using: 0
1374244954579|-1||info||No value in environment for: getAutoflush, using: true
1374244954579|-1||info||No value in environment for: getExclude, using: 
1374244954579|-1||info||No value in environment for: getExcludecategories, using: info,debug,result,batch
1374244954579|-1||info||No value in environment for: getFilter, using: true
1374244954579|-1||info||No value in environment for: getInclude, using: 
1374244954579|-1||info||No value in environment for: getIncludecategories, using: 
1374244954579|-1||info||No value in environment for: getLogfile, using: c:/spy.log
1374244954579|-1||info||No value in environment for: getAppender, using: com.p6spy.engine.logging.appender.FileLogger
1374244954579|-1||info||No value in environment for: getRealdriver, using: oracle.jdbc.driver.OracleDriver
1374244954579|-1||info||No value in environment for: getRealdriver2, using: 
1374244954580|-1||info||No value in environment for: getRealdriver3, using: 
1374244954580|-1||info||No value in environment for: getAppend, using: true
1374244954580|-1||info||No value in environment for: getSpydriver, using: com.p6spy.engine.spy.P6SpyDriver
1374244954580|-1||info||No value in environment for: getDateformat, using: 
1374244954580|-1||info||No value in environment for: getDateformatter, using: null
1374244954580|-1||info||No value in environment for: getStringmatcher, using: com.p6spy.engine.common.SubstringMatcher
1374244954580|-1||info||No value in environment for: getStringMatcherEngine, using: com.p6spy.engine.common.SubstringMatcher@13aaa14a
1374244954580|-1||info||No value in environment for: getStackTraceClass, using: 
1374244954580|-1||info||No value in environment for: getSQLExpression, using: null
1374244954580|-1||info||No value in environment for: getReloadProperties, using: false
1374244954580|-1||info||No value in environment for: getReloadPropertiesInterval, using: 60
1374244954580|-1||info||No value in environment for: getJNDIContextFactory, using: null
1374244954580|-1||info||No value in environment for: getJNDIContextProviderURL, using: null
1374244954580|-1||info||No value in environment for: getJNDIContextCustom, using: null
1374244954580|-1||info||No value in environment for: getRealDataSource, using: null
1374244954580|-1||info||No value in environment for: getRealDataSourceClass, using: null
1374244954580|-1||info||No value in environment for: getRealDataSourceProperties, using: null

P6Spyを使用した経験があり、問題が何であるかを知っている人はいますか? 私が行ったすべてのことを実行してプログラムを実行した後、spy.logはSQLステートメントを生成するだけであると読んだので、ここでかなり混乱しています

編集-- ちなみにデータベースは更新されたので、SQL ステートメントが実行され、データベースが更新されました。

4

2 に答える 2

1

これは通常、実際の JDBC ドライバーが登録された後に P6SpyDriver が DriverManager に登録されていることが原因です。P6Spy 1.3 では、JDBC URL を変更する必要はありませんでした。アプリケーション コード (またはアプリ サーバー) が DriverManager から適切なドライバーを取得しようとすると、登録済みのドライバーを循環して、URL を処理する最初のドライバーを見つけます。P6SpyDriver が実際のドライバーの前に登録されていない場合、使用されません。

この問題を解決するには、次の 2 つの方法があります。

  1. spy.properties で「deregisterdrivers=true」を設定します。

これにより、P6Spy は実際のドライバーを登録解除してから再登録します。これにより、DriverManager は P6SpyDriver を使用します。ただし、Java 6+ では、実際のドライバー用にリストしたドライバー クラスが、自動登録されるドライバー クラスと一致することを確認する必要があります。このクラス名は META-INF/services/java.sql.Driver から取得できます。そのファイルが JDBC ドライバーの JAR ファイルに存在しない場合、自動登録はサポートされません。

  1. spy.properties で「useprefix=true」を設定し、JDBC URL を変更して「p6spy:」プレフィックスを追加します。

これにより、ドライバーがロードされる順序に関係なく、P6SpyDriver が使用されるようになります。これは実際には最も信頼できる方法です...

1.3 で利用可能なさまざまな構成オプションについては、http://p6spy.github.io/p6spy/1.3/configandusage.htmlを参照してください。

于 2014-01-31T18:21:20.443 に答える