簡體   English   中英

如何使用 Spring Boot 配置 Sniffy?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM