我有一个使用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
提交
取消