如何一次性初始化SpringContext并跨任务共享?
我正在尝试在Spark应用程序中初始化spring上下文。我希望在从属节点中使用上下文,也希望重用bean。以下是相同的代码:-如何一次性初始化SpringContext并跨任务共享?,spring,apache-spark,spring-bean,spring-config,Spring,Apache Spark,Spring Bean,Spring Config,我正在尝试在Spark应用程序中初始化spring上下文。我希望在从属节点中使用上下文,也希望重用bean。以下是相同的代码:- shipperRD2.foreach(shipper->{ AmazonS3 amazonS3Client = AmazonS3ClientBuilder.standard().build(); FileSystemXmlApplicationContext context2 = new FileSystemXmlAp
shipperRD2.foreach(shipper->{
AmazonS3 amazonS3Client = AmazonS3ClientBuilder.standard().build();
FileSystemXmlApplicationContext context2 = new FileSystemXmlApplicationContext("https://s3.console.aws.amazon.com/s3/object/spring-configuration/app-context.xml");
PersistenceWrapper persistenceWrapper = context.getBean(PersistenceWrapper.class);
});
但是,这会导致每次在从属节点上运行新任务时上下文刷新。有没有办法避免这种行为。基本上,只需在第一次任务运行时初始化上下文,并在后续任务中重新使用该上下文。正如Jacek所提到的,我尝试了单例模式,它成功了
public class SpringInit {
private static FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext(fileName);
private SpringInit(){
}
public static FileSystemXmlApplicationContext getInstance(){
return context;
}
}
从火花中
shipperRD2.foreach(shipper->{
FileSystemXmlApplicationContext context = SpringInit.getInstance();
PersistenceWrapper persistenceWrapper = context.getBean(PersistenceWrapper.class);
});
您是否尝试过单例(反)模式或使用广播变量?将尝试单例模式。广播变量应该是可序列化的,因此在这里不适用。