如何使用Spring Boot批处理过程运行.bat文件

时间:2018-07-18 11:50:59

标签: java spring spring-boot spring-batch batch-processing

我有一个通过Windows Task Scheduler运行的批处理文件,它将每隔10小时重复执行一次jar文件。

现在,我正尝试使用Spring Boot批处理作为任务调度程序来运行相同的批处理文件。但是我没有得到解决方案。

我该如何解决此问题?

3 个答案:

答案 0 :(得分:1)

在您的计划方法中,尝试执行以下操作:

Runtime.getRuntime().exec("file.bat");

答案 1 :(得分:0)

您尝试过此https://spring.io/guides/gs/scheduling-tasks/

Spring Boot调度程序可以调度您的任务,并接受类似于CRON的表达式来调度重复执行的任务。

您可以使用Java ProcessBuilder API来触发批处理(.bat)文件

答案 2 :(得分:0)

您可以按照以下方式实现简单的Spring scheduling tasks

@Component
public class RunCommandScheduledTask {

    private final ProcessBuilder builder;
    private final Logger logger; //  Slf4j in this example
    // inject location/path of the bat file 
    @Inject
    public RunCommandScheduledTask(@Value("${bat.file.path.property}") String pathToBatFile) {
        this.builder = new ProcessBuilder(pathToBatFile);
        this.logger = LoggerFactory.getLogger("RunCommandScheduledTask");
    }
    // cron to execute each 10h 
    @Scheduled(cron = "0 */10 * * *")
    public void runExternalCommand() {
        try {
            final Process process = builder.start();
            if (logger.isDebugEnabled()) {
                // pipe command output and proxy it into log
                try (BufferedReader out = new BufferedReader(
                        new InputStreamReader(process.getInputStream(), StandardCharsets.ISO_8859_1))) {
                    String str = null;
                    for (;;) {
                        str = out.readLine();
                        if (null == str)
                            break;
                        logger.debug(str);
                    }
                }
            }
            process.waitFor();
        } catch (IOException exc) {
            logger.error("Can not execute external command", exc);
        } catch (InterruptedException exc) {
            Thread.currentThread().interrupt();
        }
    }

}

.....
@SpringBootApplication
@EnableScheduling
public class Application {

    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class);
    }
}