Профили Spring Batch и Spring3.1

Недавно столкнулся с проблемой, что функция профилей, включенная в Spring 3.1 с использованием нескольких определений , не работает для собственного тега Spring Batch.

<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>
Другие вопросы по тегам