“Étape” ou “Emploi” de Portée pour le Printemps-Lot de haricots?

Je suis en utilisant Spring-Batch v3.0.0 pour le lot importations. Il y a un StepScope et un JobScope. Comment puis-je savoir lequel d'entre eux est-il approprié?

Par exemple, si je définis une coutume ItemReader ou ItemWriter qui devrait utiliser un spécifique EntityManager, il pourrait ressembler à ceci:

@Bean
@Scope("step") //@Scope("job") //custom scope required to inject #jobParameters
public JpaItemWriter<T> jpaItemWriter(EntityManagerFactory emf) {
    JpaItemWriter<T> writer = new JpaItemWriter<T>();
    writer.setEntityManagerFactory(emf);
    return writer;
}

Mais dont la portée est ici? Et pourquoi?

Exécution avec step champ d'application les œuvres, mais je sens la itemWriters devrait peut-être être de job champ d'application de sorte qu'ils ne sont pas recréés à chaque étape.

J'ai essayé de commutation step à job, mais ça en jette d'erreur suivant:
Exception in thread "main" java.lang.IllegalStateException: No Scope registered for scope 'job'

comment est emf filaire? à l'aide de @Value? qui est sa portée? Aussi regarder stackoverflow.com/questions/12353570/...
emf est aussi un @Bean définition, sans portée spécifique. Concernant votre lien à cette question: oui, il semble que le travail de la portée a été introduit exactement ce que j'essaie. Mais le passage de step à job champ d'application ne fonctionne pas pour moi...
Pourquoi ne serait-ce pas un singleton? Le Travail de champ est très peu utile en cas d'utilisation. La plupart des autres scénarios doivent être singleton ou à l'étape (qui est pourquoi nous avons pris tellement de temps pour l'ajouter à la première place).
J'ai besoin de la non-singleton portée à injecter @Value("#{jobParameters[input]}") (désolé, je l'aurais écrit ça).

OriginalL'auteur membersound | 2014-06-03