Spring Batch базовый шаг со слушателями - PullRequest
1 голос
/ 07 сентября 2010

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

Нижеприведенная установка достаточно проста и довольно похожа на пример, представленный на http://static.springsource.org/spring-batch/reference/html/configureStep.html#mergingListsOnStep, но в соответствии с http://www.springframework.org/schema/batch/spring-batch.xsd, кажется, что слушатели не относятся к шагу, а скорее к тасклету.

<step id="baseLoggedStep">
    <listeners>
        <listener>
            <bean class="org.example...StepLogListener"/>
        </listener>
    </listeners>
</step>

<step id="myJobStep" parent="baseLoggedStep">
... 
</step>

Итак, кто прав, и как мне использовать правильный xsd для получения желаемого результата?

Следующий базовый шаг, похоже, делает свое дело, где слушатель StepLogListener реализует StepExecutionListener.

<batch:step id="baseLoggedStep" abstract="true">
    <batch:tasklet>
        <batch:listeners>
            <batch:listener ref="stepLogListener">
                <bean class="com.bossmedia.gem.platform.batch.StepLogListener"/>
            </batch:listener>
        </batch:listeners>
    </batch:tasklet>
</batch:step>

Однако это не кажется оптимальным и, честно говоря, не совсем правильным.Это будет означать, что baseLoggedStep является абстрактным экземпляром TaskletStep, верно?

Ответы [ 2 ]

1 голос
/ 10 марта 2014

Просто выкладываю этот пример слушателя пошагового выполнения Spring Batch, так как я не нашел хорошего онлайн.Кроме того, ссылочный пример Spring не будет работать так, как написано.

<beans:bean id="customStepExecutionListener" class="com.foo.MyCustomStepExecutionListener" />
<beans:bean id="customJobExecutionListener" class="com.foo.MyCustomJobExecutionListener" />

<!-- Abstract step listener must be defined outside job -->     
<step id="abstractListeningStep" abstract="true">
    <!-- Must be inside tasklet, but tasklet does not affect firing order -->
    <tasklet>
        <listeners>
            <listener ref="customStepExecutionListener" />
        </listeners>
    </tasklet>  
</step>

<!-- The job -->
<job id="myJob">
    <description>My Job</description>

    <listeners>
        <!-- Any job specific listeners here -->
        <listener ref="customJobExecutionListener" />
    </listeners>

    <!-- Start here -->
    <step id="myFirstStep" parent="abstractListeningStep">
        <!-- Your work/jobs/tasklets here -->
    </step>
</job>
1 голос
/ 01 сентября 2011

В соответствии с Spring Batch 2.1 XSD все, что вам нужно сделать, это сделать первый пример шага baseLoggedStep абстрактным (см. 5.1.2.1. Абстрактный шаг ).

Помните о том, что если ваши дочерние задания добавляют своих собственных слушателей, им придется объединить их (см. 5.1.2.2. Объединение списков ) или слушателей из вашего резюмеродительский шаг будет игнорироваться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...