пакет spring: ввод основного контекста приложения @Component с помощью AutomaticJobRegistrar

#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 работает, если вы его активируете.