如何一次初始化SpringContext并跨任务共享?
How to initialize SpringContext once and share across tasks?
我正在尝试在我的 Spark 应用程序中初始化 spring 上下文。我想要我的从属节点中的上下文以及我想要重新使用这些 bean。这是相同的代码:-
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);
});
我正在尝试在我的 Spark 应用程序中初始化 spring 上下文。我想要我的从属节点中的上下文以及我想要重新使用这些 bean。这是相同的代码:-
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);
});