我有一个通过Windows Task Scheduler运行的批处理文件,它将每隔10小时重复执行一次jar文件。
现在,我正尝试使用Spring Boot批处理作为任务调度程序来运行相同的批处理文件。但是我没有得到解决方案。
我该如何解决此问题?
答案 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);
}
}