“É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'
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
Vous devez vous connecter pour publier un commentaire.
Depuis le Printemps-Lot v3.0.1 vous pouvez utiliser @JobScope
OriginalL'auteur Eiland
Eu: l'un est à la portée d'un haricot explicite au sein de la
@Configuration
fichier.JobScope is abstract and cannot be instantiated.
Bien sûr, je n'ai pas l'impression d'avoir besoin lors de l'utilisation de la@JobScope
annotation, alors peut-être que c'était juste un 3.0.0 chose.Je suis en utilisant
spring-batch
dans le contexte despring-boot-1.4.0
de nos jours, et non pas à l'aide de la@Bean JobScope
plus. Alors, probablement que c'était juste un problème hérité. Désormais, vous pouvez simplement utiliser les deux@StepScope
et@JobScope
sur votreSteps
. Je pense que le problème dans le passé a été leJobScope
bean n'a pas été initialisé par défaut. Mais il est maintenant.OriginalL'auteur membersound