【发布时间】:2026-02-14 06:45:01
【问题描述】:
我想通过 SystemCommandTasklet 运行系统命令。使用下面的示例代码进行了尝试,但出现错误。
我认为这是因为命令参数,但我无法修复它。
如果有帮助我会很高兴的。
参考例子;
- Using SystemCommandTasklet for split the large flat file into small files
- Trying to split files using SystemCommandTasklet - Execution of system command did not finish within the timeout
错误详情;
“CreateProcess error=2,系统找不到指定的文件”
代码示例;
@Bean
@StepScope
public SystemCommandTasklet fileSplitterSystemCommandTasklet(@Value("#{jobParameters['file']}") File file) throws Exception {
final String fileSeparator = System.getProperty("file.separator");
String outputDirectory = file.getPath().substring(0, file.getPath().lastIndexOf(fileSeparator)) + fileSeparator + "out" + fileSeparator;
File output = new File(outputDirectory);
if (!output.exists()) {
output.mkdir();
}
final String command = String.format("split -a 5 -l 10000 %s %s",file.getName(),outputDirectory);
var fileSplitterTasklet = new SystemCommandTasklet();
fileSplitterTasklet.setCommand(command);
fileSplitterTasklet.setTimeout(60000L);
fileSplitterTasklet.setWorkingDirectory(outputDirectory);
fileSplitterTasklet.setTaskExecutor(new SimpleAsyncTaskExecutor());
fileSplitterTasklet.setSystemProcessExitCodeMapper(touchCodeMapper());
fileSplitterTasklet.afterPropertiesSet();
fileSplitterTasklet.setInterruptOnCancel(true);
fileSplitterTasklet.setEnvironmentParams(new String[]{
"JAVA_HOME=/java",
"BATCH_HOME=/Users/batch"});
return fileSplitterTasklet;
}
【问题讨论】:
标签: spring-boot spring-batch flat-file spring-batch-tasklet