2017-12-01 14 views
2

내 Spark 응용 프로그램에서 스프링 컨텍스트를 초기화하려고합니다. 슬레이브 노드에서 컨텍스트를 원할뿐만 아니라 빈을 다시 사용하고 싶습니다. 다음과 같은 코드가 있습니다 : -SpringContext를 한 번 초기화하고 여러 태스크를 공유하는 방법은 무엇입니까?

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

싱글 톤 패턴을 시도합니다. 브로드 캐스트 변수는 직렬화 가능해야하므로 여기에 적용되지 않습니다. – Sanchay

답변

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