2014-01-03 5 views
5

недавно столкнулся с проблемой, что функция профилей включена с пружиной 3.1 с использованием нескольких опций < beans> не работает для собственного тега весеннего пакета.Профили Spring Batch и Spring3.1

<beans profile="prod"> 
    <bean id ="test" class="java.lang.String"></bean> 
    <batch:job id="job" abstract="true" > 
    <batch:listeners> 

     <batch:listener ref="jobExecutionContextDateSetter" /> 
     <batch:listener ref="jobStatusListener"/> 
     </batch:listeners> 
    </batch:job> 
</beans> 

<beans profile="dev"> 
    <bean id ="test" class="java.lang.String"></bean> 
    <batch:job id="job" abstract="true" > 
     <batch:listeners> 
      <batch:listener ref="jobExecutionContextDateSetter" /> 
     </batch:listeners> 
    </batch:job> 
</beans> 

работает тестовый пример (с из включения любых из профилей) весной жалуется многократной аннотацией найденного идентификатора «задание». Есть идеи ?

+0

ли вы когда-нибудь найти решение этой проблемы? У меня такая же проблема. –

+0

Пока нет. Сделал обходной путь для моего случая - для dev я создаю «stubJobStatusListener» в профиле dev в качестве реализации заглушки слушателя. И имеют из профилей. – magulla

ответ

2

У меня была такая же проблема, и это из-за весеннего механизма проверки XML. Как вы знаете, когда вы создаете файл весны xml, сначала весна отправляет этот файл в синтаксический анализатор XML для его проверки.

Я имею в виду, что вы можете определить два или более компонента с одним и тем же идентификатором. Затем вы можете увидеть, что весной XML-валидатор без проблем анализирует ваш XML-файл. Хотя в более поздних этапах весна сама генерирует исключение, если эти компоненты находятся в одном профиле или вне профиля.

BUT В весенней партии XML-валидатор не позволяет иметь два задания с одним и тем же идентификатором.

Решение этого заключается в том, что вы можете определить свою партию из любого профиля и определить его бобы в профиле следующим образом:

<batch:job id="job1" abstract="true" job-repository="jobRepository"> 
     <batch:listeners> 
      <batch:listener ref="jobListener"/> 
     </batch:listeners> 
</batch:job> 

<beans profile="prod"> 
     <bean id="jobListener" class="com.batch.ProductionJobListener"/> 
</beans> 

<beans profile="dev"> 
    <bean id="jobListener" class="com.batch.DevelopmentJobListener"/> 
</beans>