手把手教你入门vue+springboot开发(二十五)--springboot执行脚本


前言

在实际的业务开发过程中经常需要执行一些脚本,比如文件备份恢复、数据库备份恢复等,在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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值