赞
踩
Windows系统使用java -jar m命令行运行Java项目会弹出黑窗。首先容易误点导致程序关闭,其次我们希望能在Windows系统做到开机自动启动。因此对于SpringBoot程序,目前主流的方法是采用winsw,简单容易配置
https://github.com/winsw/winsw/releases
将下载的文件与jar文件放置在一起,两个文件名修改为服务名
(服务名自定义)
注意不要出现中文
, arguments和logpath标签内的jar文件地址要改为自己的目录
<service>
<!-- ID of the service. It should be unique across the Windows system-->
<id>testapp</id>
<!-- Display name of the service -->
<name>test service</name>
<!-- Service description -->
<description>This service is a service created from a minimal configuration</description>
<env name="JAVA_HOME" value="%JAVA_HOME%"/>
<executable>java</executable>
<arguments>-jar "H:\testautostart\cxstar-api-rest-1.0.0.jar"</arguments>
<startmode>Automatic</startmode>
<logpath>H:\testautostart\logs</logpath>
<logmode>rotate</logmode>
</service>
logmode:日志输出模式,默认为append,官方文档
参数解析
标签名 | 作用 |
---|---|
id | 服务ID,在windows系统中必须唯一的系统标识 |
name | 服务显示名称,不能使用中文,仅限英文、数字、横线等 |
description | 服务描述,描述服务的作用 |
env | 设置环境变量 |
executable | 启动可执行文件的路径,如果配置了Java环境变量,可以直接使用java替代。否则使用全路径 (这里容易坑) |
arguments | 传递给可执行文件的参数 |
startmode | 指定Windows服务的启动模式,它可以是下列值之一:开机、系统、自动或手动, 默认值是“Automatic” |
logpath | 配置日志路径 |
logmode | 日志输出模式,默认为append |
logmode:
当前目录输入cmd,进入命令行模式,执行服务注册命令
testapp.exe install
服务中已经存在该服务
双击设置为自动即可
卸载服务:
testapp.exe uninstall
其他服务命令:
testapp.exe start:启动服务
testapp.exe stop:停⽌服务
testapp.exe restart:重启服务
testapp.exe status:输出当前服务的状态
服务启动成功后自动关闭,日志文件也没有生成。执行java -jar的命令,服务可以正常启动。在控制面板—管理工具—事件查看器—window日志—应用程序—找出对应服务的日志。如下:
Service cannot be started.
System.ComponentModel.Win32Exception: The system cannot find the file specified
at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
at winsw.WrapperService.StartProcess(Process processToStart, String arguments, String executable)
at winsw.WrapperService.OnStart(String[] _)
at System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state)
提示很清楚,系统没有找到指定文件,而在winsw的xml文件中就已经配置了executable,而且环境变量配置正确。那为什么还提示文件没有找到?于是将java改为了全路径,重新注册服务并成功启动服务
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。