Как инициализировать SpringContext один раз и делиться между задачами?
Я пытаюсь инициализировать весенний контекст в моем приложении Spark. Мне нужен контекст в моих подчиненных узлах, а также я хочу повторно использовать бины. Вот код для того же самого:-
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 ответ
Решение
Как упомянул Яцек, я попробовал шаблон синглтона, и он работал.
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);
});