亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 MockBean 清理 Spring Context 緩存失敗 loadLibrary

使用 MockBean 清理 Spring Context 緩存失敗 loadLibrary

拉丁的傳說 2023-09-27 17:28:24
我有一個使用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(因為它應該清除模擬組件中的應用程序上下文),但庫的加載只發生一次。


查看完整回答
反對 回復 2023-09-27
?
溫溫醬

TA貢獻1752條經驗 獲得超4個贊

嘗試延遲加載,以便僅在真正需要時(即在調用其某些方法之前)才有效加載庫。

1)根據邏輯的復雜性,將 bean 定義為 @Lazy 可以提供幫助。

2)如果這不是你的情況,手動實現延遲加載會有所幫助。例如,您可以使用代理,僅在第一次調用其中一個方法時才加載庫。

3) 可能需要對應用程序的邏輯進行一些修改,以推遲加載庫的代碼的使用。


查看完整回答
反對 回復 2023-09-27
  • 2 回答
  • 0 關注
  • 158 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號