2 votes

Comment initialiser SpringContext une seule fois et le partager entre les différentes tâches ?

J'essaie d'initialiser le contexte Spring dans mon application Spark. Je veux le contexte dans mes nœuds esclaves et je veux réutiliser les beans. Voici le code pour cela :-)

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

Cependant, cela conduit à un rafraîchissement du contexte à chaque fois qu'une nouvelle tâche s'exécute sur le nœud esclave. Existe-t-il un moyen d'éviter ce comportement ? En gros, il suffit d'initialiser le contexte lors de l'exécution de la première tâche, et de réutiliser ce contexte dans les tâches suivantes.

2voto

Sanchay Points 339

Comme l'a indiqué Jacek, j'ai essayé le modèle singleton et cela a fonctionné.

public class SpringInit {

    private static FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext(fileName);

    private SpringInit(){
    }

    public static FileSystemXmlApplicationContext getInstance(){
        return context;
    }
 }

De l'étincelle,

shipperRD2.foreach(shipper->{

  FileSystemXmlApplicationContext context = SpringInit.getInstance();
PersistenceWrapper persistenceWrapper = context.getBean(PersistenceWrapper.class);
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X