Windows脚本用于启停Java应用程序JAR包,并具备日志输出功能

createh54个月前 (12-16)技术教程47

1. 创建批处理脚本创建一个批处理文件(例如 app.bat),并在其中编写启动和停止 JAR 包的命令,并将输出重定向到日志文件。

app.bat

@echo off

setlocal


:: 设置环境变量

set JAVA_HOME=C:\Program Files\Java\jdk-17 ;; 根据你的 JDK 安装路径进行修改

set PATH=%JAVA_HOME%\bin;%PATH%


:: 设置 JAR 文件路径

set JAR_FILE=path\to\your\application.jar ;; 修改为你的 JAR 文件路径

set LOG_FILE=path\to\your\app.log ;; 修改为你希望的日志文件路径


:: 设置 JVM 参数

set JVM_OPTS=-Xms512m -Xmx1024m ;; 根据需要调整 JVM 参数


:menu

cls

echo.

echo -----------------------------------------

echo 1. 启动应用

echo 2. 停止应用

echo 3. 查看日志

echo 4. 退出

echo -----------------------------------------

echo.


set /p choice=请输入选项 (1, 2, 3, 4):


if "%choice%"=="1" goto start

if "%choice%"=="2" goto stop

if "%choice%"=="3" goto view_log

if "%choice%"=="4" goto exit

goto menu


:start

echo 正在启动应用...

echo [%(date)T] 启动应用 >> %LOG_FILE%

start "MyApp" java %JVM_OPTS% -jar %JAR_FILE% > %LOG_FILE% 2>&1

echo 应用已启动。

echo [%(date)T] 应用已启动 >> %LOG_FILE%

pause

goto menu


:stop

echo 正在停止应用...

for /f "tokens=5" %%a in ('netstat -ano ^| findstr :8080') do set PID=%%a ;; 假设应用监听 8080 端口

if not defined PID (

echo 没有找到运行的应用。

echo [%(date)T] 没有找到运行的应用 >> %LOG_FILE%

) else (

taskkill /F /PID %PID%

echo 应用已停止。

echo [%(date)T] 应用已停止 >> %LOG_FILE%

)

pause

goto menu


:view_log

echo 查看日志...

type %LOG_FILE%

pause

goto menu


:exit

echo 退出脚本。

endlocal

exit /b 0

2. 解释脚本

?设置环境变量:设置 JAVA_HOME 和 PATH,确保脚本可以找到 Java 运行时环境。

?设置 JAR 文件路径:指定 JAR 文件的路径和日志文件的路径。

?设置 JVM 参数:根据需要设置 JVM 的内存参数。

?菜单:提供一个简单的菜单供用户选择操作。

?启动应用:

?使用 java -jar 命令启动 JAR 文件,并将输出重定向到日志文件。

?在启动前和启动后向日志文件中添加时间戳信息。

?停止应用:

?通过查找特定端口(假设是 8080)来获取进程 ID,并使用 taskkill 命令终止该进程。

?在停止前后向日志文件中添加时间戳信息。

?查看日志:显示日志文件的内容。

?退出:退出脚本。

3. 使用脚本

1. 将上述内容保存为 app.bat。

2. 打开命令提示符,导航到保存 app.bat 的目录。

3. 运行 app.bat 脚本: app.bat


4. 注意事项

?端口号:在 :stop 部分,假设应用监听 8080 端口。如果你的应用监听其他端口,请相应地修改 findstr :8080 中的端口号。

?JVM 参数:根据你的应用需求调整 JVM_OPTS 中的参数。

?日志文件:确保日志文件路径存在并且可写。

通过这个脚本,你可以在 Windows 环境下方便地启动和停止 Java 应用程序的 JAR 包,并且能够查看详细的日志输出。

相关文章

Java内部类有哪些使用场景?使用时有哪些坑?

什么是内部类?内部类,顾名思义,就是在一个类内部创建的类。那么,内部类有哪些使用场景?使用内部类时有哪些坑?内部类的坑在内部类中的方法内部,调用外围类类名.this方法会返回当前内部类所连接的外围类对...

Java面试题:应用程序中存在包冲突的情况下,怎么发现和解决

你们能想象,一个工作4年的程序员,竟然连这个问题都搞不清楚。应用程序中存在包冲突的情况下,解决的问题应该很容易吧,甚至大家在工作中应该也遇到过啊。好吧,今天抽空给大家分享一下这个问题的回答思路。问题分...

Java基础之try catch finally的原理

简介java做业务开发同学经常会使用try catch finally捕捉异常,而使用起来有还有三种组合,try finally 和 try catch 和 try catch finally。示例t...