那麼,如果你真的想剖析所有正在執行的數據庫操作,簡單的方法就是去記錄它們。不是使用AOP,而是建議您使用稱爲Log4JDBC的托架TPL。
基本上,所有你必須做的是像這樣的東西取代您的數據源聲明:
<bean id="dataSource" class="net.sf.log4jdbc.Log4jdbcProxyDataSource" >
一旦做到這一點,你只需要設置你的記錄器記錄相關的日誌信息。 log4Jdbc可用的各種記錄器是
jdbc.sqlonly: Logs only SQL
jdbc.sqltiming: Logs the SQL, post-execution, including timing execution statistics
jdbc.audit: Logs ALL JDBC calls except for ResultSets
jdbc.resultset: all calls to ResultSet objects are logged
jdbc.connection: Logs connection open and close events
例如, :
<logger name="jdbc.sqltiming" additivity ="false">
<level value="info" />
</logger>
<logger name="jdbc.resultset" additivity ="false">
<level value="error" />
</logger>
<logger name="jdbc.audit" additivity ="false">
<level value="error" />
</logger>
<logger name="jdbc.sqlonly" additivity ="false">
<level value="error" />
</logger>
<logger name="jdbc.resultsettable" additivity ="false">
<level value="error" />
</logger>
<logger name="jdbc.connection" additivity ="false">
<level value="error" />
</logger>
<logger name="jdbc.resultsettable" additivity ="false">
<level value="error" />
</logger>
更多詳細信息可在Log4JDBC official Site找到。
你可以找到休眠特定的設置here。
我已經在使用JdbcTemplate的應用程序中成功實現了它。
感謝您的回答!不過,我不確定在我的Spring配置中使用AspectJ而不是Spring AOP還有什麼比使用' '更有效。我使用的所有註釋都位於'org.aspectj.lang.annotation'包中。 –
Andy
2014-10-29 18:01:54
即使拋出的異常來自AspectJ:'org.aspectj.weaver.tools.UnsupportedPointcutPrimitiveException:切入點表達式'sqlOperation(sql)'包含不受支持的切入點原語'call'' ...我是否缺少某些東西? – Andy 2014-10-29 18:02:54
是的,你錯過了autoproxy設置是針對Spring AOP的。 AspectJ不使用任何代理。查看Spring文檔,第[9.8將AspectJ與Spring應用程序結合使用]一章(http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/aop.html#aop-using-aspectj )。如果你不使用真正的AspectJ,你不能使用'call()'切入點。 – kriegaex 2014-10-29 21:00:54