[英]How do I configure Sniffy with Spring Boot?
Sniffy是一個很酷的小項目:
Sniffy 計算執行的 SQL 查詢的數量並提供用於驗證它們的 API 它專為單元測試而設計,並允許您測試特定方法是否不超過 N 個 SQL 查詢特別是在捕獲 ORM N+1 問題時很有用早期階段
它還提供了一個 servlet 過濾器,該過濾器將 HTML 注入到頁面中,並彈出一個顯示您執行的查詢的彈出窗口。 該文檔解釋了如何為傳統的基於web.xml
的應用程序而不是 Spring Boot 配置它。 我設法通過將此 bean 添加到@Configuration
類來注冊 servlet 過濾器:
@Bean
public FilterRegistrationBean snifferFilter()
{
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
SnifferFilter filter = new SnifferFilter();
filter.setInjectHtml(true);
filterRegistrationBean.setFilter(filter);
filterRegistrationBean.setName("sniffer");
filterRegistrationBean.addUrlPatterns("/*");
return filterRegistrationBean;
}
我還更新了 JDBC url,文檔說:
將 sniffer: 前綴添加到 JDBC 連接 url 例如 jdbc:h2:~/test 應更改為 sniffer:jdbc:h2:mem:
所以我在application.yml
添加了以下內容:
spring.datasource.url: sniffer:jdbc:mysql://localhost:3306
但是當我啟動我的應用程序時,它失敗並顯示以下錯誤:
URL 必須以 'jdbc' 開頭
嗅探作者在這里!
實際上,從 3.0.7 版(2016 年 4 月)開始,您必須在 Spring Boot 應用程序中明確指定驅動程序類名稱。 錯誤跟蹤器中有一個未解決的問題可以自動配置它。
順便說一句,sniffy 3.0.5 使用@EnableSniffy
注釋引入了 Spring Boot 的開箱即用支持,因此您不必再自己創建FilterRegistrationBean
- 只需將注釋放入您的應用程序類,如下所示:
import io.sniffy.boot.EnableSniffy;
@SpringBootApplication
@EnableAutoConfiguration
@EnableSniffy
public class Application {
public static void main(String[] args) throws ClassNotFoundException {
SpringApplication.run(Application.class, args);
}
}
我設法找出了問題所在,Spring Boot 廣泛使用了自動配置,並試圖從連接字符串中檢測DatabaseDriver
。 由於連接字符串不再以jdbc
開頭,因此遇到了問題。
這只是在我的application.yml
中指定driver-class-name
而不是讓 Spring Boot 嘗試自動檢測它的情況:
spring.datasource.driver-class-name: io.sniffy.MockDriver
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.