Профили Spring Batch и Spring3.1
Недавно столкнулся с проблемой, что функция профилей, включенная в Spring 3.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>
выполняя тестовый пример (без включения любого из профилей), Spring жалуется на множественные аннотации, найденные для идентификатора "job". Есть идеи?
1 ответ
У меня была та же проблема, и это из-за пружинного валидатора XML. Как вы знаете, когда вы создаете XML-файл Spring, сначала Spring отправляет этот файл в анализатор XML для его проверки.
Я имею в виду, что вы можете определить два или более бобов с одинаковым идентификатором. Затем вы можете увидеть, что Spring XML validator без проблем анализирует ваш XML-файл. Хотя на более поздних этапах сама весна вызывает исключение, если эти бобы находятся в одном профиле или вне какого-либо профиля.
НО в весеннем пакете, валидатор XML не позволяет иметь два задания с одинаковым идентификатором.
Решением для этого является то, что вы можете определить свой пакет из любого профиля и определить его bean-компоненты в профилях следующим образом:
<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>