我有一个组件A,它异步运行组件B中的foo()方法(@异步接口)。但是,组件B中的数据可能还没有初始化,然后foo()就不能正常工作了。组件A需要等待组件B中的数据被初始化。
在Spring中是否有任何高级解决方案(我不想直接使用线程)来尝试等待一段时间,看看组件B是否初始化,如果它早些时候初始化,foo()方法也能运行吗?Thread.sleep()可以工作,但它总是等待所有的时间,我不需要这样做。
发布于 2022-08-19 07:31:52
我认为您可以查看@DependsOn注释,该注释允许将bean实例化推迟到它的依赖项准备就绪。在组件B中,您可以添加一个带有@PostConstruct注释的方法来初始化数据,在组件A上添加@DependsOn声明
@Configuration
class MyConfig {
@Bean
@DependsOn({"b"})
public A a(){
return new A();
}
@Bean
public B b() {
return new B();
}
@Bean
public C c() {
return new C();
}
}
class B {
@PostConstruct
void init() {/*...*/}
}
class C {
@Lazy
@Autowired
private A a;
void foo() {
Future<T> result = a.myAsyncMethod();
}
}https://stackoverflow.com/questions/73412935
复制相似问题