前言
在实际的业务开发过程中经常需要执行一些脚本,比如文件备份恢复、数据库备份恢复等,在C语言中一般使用system,那么在springboot中如何实现呢?今天我们就使用一个文件备份的具体实例来研究一下这个问题,顺带解决一下springboot后端通过命令行编译打包生成一个jar包的问题。
一、使用命令行编译生成一个jar包
在《手把手教你入门vue+springboot开发(五)–docker部署》中我们介绍了springboot后端编译打包过程,当时是通过windows安装的IDEAU工具直接编译打包,除了生成应用程序的jar包,out文件夹还生成了一堆依赖的jar包。但是在实际项目中我们一般在linux系统下编译打包,需要通过命令行方式,并且最好是生成一个jar包便于维护管理。
maven提供了这个功能,在linux下执行命令:mvn clean package -DskipTests可以直接生成一个jar包,在IDEAU工具中操作如下,等同于linux下执行该命令。
1、点击IDEAU工具右侧的m图标,弹出Maven窗口中点击右上方>图标,如下图所示:

2、选择“Skip Tests”图标,Lifecycle下方的test会显示灰色,点击package即是打包jar。

3、在springboot项目源代码同级的target目录就会生成如下的jar包,这个jar包包含了应用的jar包和所有依赖的jar包。

这里注意,如果不选择“Skip Tests”,可能会报错。
二、springboot执行脚本
1.在utils目录增加文件ShellScriptExecutor.java,主要封装脚本执行的方法,代码如下:
package com.example.demo.utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.concurrent.TimeUnit;
public class ShellScriptExecutor {
private static final Logger logger = LoggerFactory.getLogger(ShellScriptExecutor.class);
/**
* 执行系统路径中的Shell脚本(带参数)
*
* @param absolutePath 脚本的绝对路径
* @param args 传递给脚本的参数
* @return 脚本退出码
* @throws IOException
* @throws InterruptedException
* @throws ScriptExecutionException
*/
public static int executeSystemScript(String absolutePath, String... args)
throws IOException, InterruptedException, ScriptExecutionException {
// 验证脚本路径
validateScriptPath(absolutePath);
// 构建命令数组
String[] command = buildCommand(absolutePath, args);
// 创建ProcessBuilder
ProcessBuilder processBuilder = new ProcessBuilder(command);
// 设置工作目录(脚本所在目录)
processBuilder.directory(new File(absolutePath).getParentFile());
// 合并标准输出和错误流
processBuilder.redirectErrorStream(true);
// 启动进程
logger.info("执行命令: {}", String.join(" ", comman

--springboot执行脚本&spm=1001.2101.3001.5002&articleId=156353959&d=1&t=3&u=cb2e05327736473e8ca0754fcd4f498c)
1万+

被折叠的 条评论
为什么被折叠?



