- У меня проблема с тем, что мне нужно получить серию сообщений из очереди MQ, записать это в файл и запустить пакетное задание пружины с файлом в качестве ввода
Один из способов сделать это - задействовать Spring Integration, где у вас будет файловый опросщик, который будет запрашивать новый файл:
<file:inbound-channel-adapter id="filePoller"
channel="filesAreComing"
directory="file:${input.directory}"
filename-pattern="test*" />
Адаптируйте file message
(java.io.File) к file name
(String), так как это то, что нужно Spring Batch. Это можно сделать с помощью адаптера JobLauncher, который уже доступен в Spring Batch Admin здесь :
@ServiceActivator
public JobLaunchRequest adapt(File file) throws NoSuchJobException {
JobParameters jobParameters = new JobParametersBuilder().addString(
"input.file", file.getAbsolutePath()).toJobParameters();
return new JobLaunchRequest(job, jobParameters);
}
оберните его в JobLaunchRequest
(который является просто держателем для Job
и JobParameters
) и отправьте этот запрос [в виде сообщения] на JobLaunchingMessageHandler
:
<service-activator input-channel="jobLauncher">
<beans:bean class="org.springframework.batch.integration.launch.JobLaunchingMessageHandler">
<beans:constructor-arg ref="jobLauncher" />
</beans:bean>
</service-activator>
, который запустит задание.
«input.file» - это параметр, связанный во время выполнения (следовательно, # {...}):
<bean id="reader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
<property name="resource" value="#{jobParameters[input.file]}" />
... line mapper and other props
</bean>