我有一個使用https://github.com/scijava/native-lib-loader加載庫的配置類(這很棒)。不幸的是,使用@MockBean它時會強制刷新上下文緩存。我不知道為什么,但我不能跑NativeLoader.loadLibrary("my-lib")兩次,因為我FileNotFoundException: The process cannot access the file because it being used by another process第二次就得到了。如何使配置在測試期間運行一次或使 NativeLoader 加載我的庫兩次?
2 回答

慕斯709654
TA貢獻1840條經驗 獲得超5個贊
我沒有NativeLoader.loadLibrary("my-lib")使用 spring 的生命周期鉤子,而是使用靜態上下文。
static {
? ? try {
? ? ? ? NativeLoader.loadLibrary("my-lib")
? ? } catch (IOException ex) {
? ? ? ? throw new ExceptionInInitializerError(ex);
? ? }
}
最主要的是使用ExceptionInInitializerError
它是為這種靜態上下文初始化而構建的。
因此,當使用時@MockBean,spring 確實在每個測試中運行@PostConstruct(因為它應該清除模擬組件中的應用程序上下文),但庫的加載只發生一次。

溫溫醬
TA貢獻1752條經驗 獲得超4個贊
嘗試延遲加載,以便僅在真正需要時(即在調用其某些方法之前)才有效加載庫。
1)根據邏輯的復雜性,將 bean 定義為 @Lazy 可以提供幫助。
2)如果這不是你的情況,手動實現延遲加載會有所幫助。例如,您可以使用代理,僅在第一次調用其中一個方法時才加載庫。
3) 可能需要對應用程序的邏輯進行一些修改,以推遲加載庫的代碼的使用。
添加回答
舉報
0/150
提交
取消