2016-11-16 5 views
0

У меня есть launch-context.xml, который определяет 7 разных заданий, все из которых имеют один и тот же родительский элемент. У них есть имена вроде «jobA», «jobB» и т. Д.Квалификация задания для работы с JobLauncherTestUtils не работает

Я пробовал:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = { "/launch-context.xml", "/OurBatchKernelTestConfig.xml" }) 
public class AllTest extends BaseRaptorBatchTest { 

    @Autowired 
    private JobLauncherTestUtils utils; 

    @Autowired 
    @Qualifier(value="jobA") 
    private Job job; 

    @Test 
    public void testLaunch() { 
     Properties p = new Properties(); // then I set these up. 
     JobExecution je = utils.launchJob(paraCvter.getJobParameters(p)); 
    } 
} 

Это не работает.

я получаю исключение, как:

STDOUT [WARN ] [2015.04.15 11:14:42] support.GenericApplicationContext - Exception encountered during context initialization - cancelling refresh attempt 
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jobLauncherTestUtilsForSnapshot': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void org.springframework.batch.test.JobLauncherTestUtils.setJob(org.springframework.batch.core.Job); nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [org.springframework.batch.core.Job] is defined: expected single matching bean but found 2: coverageRuleBatch,generateMetricsSnapshotJob 

Я также попытался:

https://stackoverflow.com/a/29658577/869809

и я попробовал:

https://stackoverflow.com/a/36352437/869809

Ни одна из этих работ.

Я могу создать копию моего файла launch-content.xml и удалить другие задания. Затем я говорю об этом в аннотации, и все хорошо. Но мне тогда нужны 7 разных xml-файлов. Ик.

ответ

0

На основании информации, содержащейся в сообщении об исключении, представляется, что вам необходимо устранить, какой компонент в контексте Spring должен быть автоматически добавлен к переменной-члену utils. Что-то вроде этого:

@Autowired 
@Qualifier(value="coverageRuleBatch") 
private JobLauncherTestUtils utils; 

или это:

@Autowired 
@Qualifier(value="generateMetricsSnapshotJob") 
private JobLauncherTestUtils utils; 

должен разрешить неоднозначность.

+0

Итак, сначала я хотел использовать экземпляр JobLauncherTestUtils с автоподключением и вызвать setJob на нем с желаемым заданием. Но автоматическая проводка задания ivar с помощью @Qualifier (value = "jobA") не работала. –

+0

Во-вторых, я попытался использовать подкласс класса JobLauncherTestUtils, который включал в себя набор моей работы. Это тоже не сработало. –

+0

На самом деле вы предлагаете то же самое решение, что и в http://stackoverflow.com/a/36352437/869809, которое я привел выше. Это не сработало. –