nob*_*ody 2 java spring ejb spring-batch
我有一个问题,我需要从MQ队列接收一系列消息并将其写入文件并启动弹出批处理作业,并将该文件作为输入.现在我正在考虑使用@Autowired JobLauncher jobLauncher and @Autowired Job job;MDB本身的有线连接来启动这项工作.但我觉得这不是一个好方法,因为Spring批处理可能会创建一系列线程,因此EJB不支持多线程.
有没有其他有效的方法来做到这一点?我不想使用石英调度程序或其他任何东西,因为它增加了复杂性.春天批处理中是否有任何接口在文件进入目录后很快就会启动作业?任何做得更好的线索将不胜感激.
谢谢.
一种方法是使用一个Spring Integration,你将有一个文件轮询器,它会轮询一个新文件:
<file:inbound-channel-adapter id="filePoller"
channel="filesAreComing"
directory="file:${input.directory}"
filename-pattern="test*" />
Run Code Online (Sandbox Code Playgroud)
将file message(java.io.File)调整为file name(String),因为这是Spring Batch所需要的.这可以用JobLauncher适配器,这是已经可以从Spring Batch的管理员来完成此:
@ServiceActivator
public JobLaunchRequest adapt(File file) throws NoSuchJobException {
JobParameters jobParameters = new JobParametersBuilder().addString(
"input.file", file.getAbsolutePath()).toJobParameters();
return new JobLaunchRequest(job, jobParameters);
}
Run Code Online (Sandbox Code Playgroud)
它换到一个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>
Run Code Online (Sandbox Code Playgroud)
这将启动这项工作.
"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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6826 次 |
| 最近记录: |