#spring #spring-batch
#spring #пакет spring-batch
Вопрос:
Я пытаюсь внедрить некоторый @Service
/ @Repository
bean, определенный в основном контексте приложения, в некоторые задания, загружаемые AutomaticJobRegistrar
.
<bean class="org.springframework.batch.core.configuration.support.AutomaticJobRegistrar">
<property name="applicationContextFactories">
<bean class="org.springframework.batch.core.configuration.support.ClasspathXmlApplicationContextsFactoryBean">
<property name="resources" value="classpath*:/META-INF/jobs/*Job.xml" />
</bean>
</property>
<property name="jobLoader">
<bean class="org.springframework.batch.core.configuration.support.DefaultJobLoader">
<property name="jobRegistry" ref="jobRegistry" />
</bean>
</property>
</bean>
Использование @Autowired
внутри моего ItemWriter
класса реализации не вводит мои компоненты сервисов.
Я должен включить сканирование компонентов внутри каждого *Job.xml
или объявить каждый компонент, чтобы выполнить инъекцию, но введенные классы не являются тем же экземпляром, который используется в основном контексте приложения.
Как я могу получить тот же экземпляр компонента, объявленный в основном контексте приложения?
Спасибо за любые советы
Ответ №1:
Вы активировали context:annotation-config
для каждого задания?
Если для каждого задания создается новый applicationcontext, вам нужно активировать это, иначе обработка аннотаций (включая @Autowired ) не произойдет.
‘context: component-scan’ также активирует ‘context: annotation-config’, так что это может быть причиной того, что @Autowired работает, если вы его активируете.