如何初始化SpringContext并共享任务?

时间:2017-12-01 14:33:47

标签: spring apache-spark spring-bean spring-config

我正在尝试在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);
});

但是,每次在从属节点上运行新任务时,都会导致上下文刷新。有没有办法避免这种行为。基本上,只需在第一个任务运行时初始化上下文,然后在后续任务中重用该上下文。

1 个答案:

答案 0 :(得分:2)

正如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);
});