![](/img/trans.png)
[英]Spring Boot @Value annotation picks up key from application.properties, but does not use it at run time
[英]Running Spring Boot application through Eclipse picks up test classes
我正在使用帶有Gradle插件的STS開發Spring Boot應用程序。 我有不同的測試配置,以防止我們的Selenium測試必須登錄。
所以在src/test/java/etc
我有這樣的東西:
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
@EnableWebSecurity
public static class SecurityConfig extends WebSecurityConfigurerAdapter
{
@Override
protected void configure(HttpSecurity http) throws Exception
{
http.authorizeRequests().anyRequest().permitAll();
}
}
而在src/main/java
我有一個等效的類可配置login等,要求所有頁面都登錄。
如果我通過Gradle插件(bootRun)運行該應用程序,則一切正常。
但是,如果我直接通過Eclipse運行或調試它(例如,右鍵單擊項目,Run As-> Spring Boot App或通過單擊Spring或Java視圖中的運行/調試按鈕),則將應用測試配置,因此訪問無需登錄即可授予所有頁面。
我猜測以這種方式啟動應用程序時,測試類已包含在類路徑中。 有沒有簡單的方法可以防止這種情況發生?
從eclipse運行測試時,類路徑是通過eclipse(而不是通過maven或gradle)准備的。
Eclipse每個項目僅使用一個類路徑,並且對依賴范圍(例如“編譯”或“測試”)一無所知。 因此,類路徑始終包含引用項目的任何資源。
您無法更改這種日食行為。 您需要使用命名約定,配置文件等,以避免意外使用測試資源。
您可以將@TestComponent
附加到測試配置類。 在應用程序的組件掃描期間,將跳過這些bean配置。 根據組件掃描配置,您需要定義一個@ComponentScan排除過濾器: excludeFilters = @ComponentScan.Filter(value = TestComponent.class, type = FilterType.ANNOTATION))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.