SpringBoot注册Windows服务和启动报错的原因

Windows系统启动Java程序会弹出黑窗口。黑窗口有几点不好。首先它不美观;其次容易误点导致程序关闭;但最让我匪夷所思的是:将鼠标光标选中黑窗口日志信息,程序竟然不会继续执行,日志也不会继续输出。从而导致页面一直处于请求状态。回车后程序才能正常执行。同时客户希望我们能部署在Windows系统上并且做到开机自动启动。针对以上需求将系统程序注册成Windows服务变得尤为重要。

针对于SpringBoot程序,目前主流的方法是采用winsw,简单方便。可是在开发过程中,针对不同的系统,启动服务可能会出现意想不到的结果。同样的配置方法,在win10可以成功注册并启动服务。而在windows server 2012 却启动失败。这里分享我的经验。

注册windows服务

制作流程

winsw是⼀款可以将可执⾏程序安装成Windows Service的开源⼩⼯具,官⽹地址, 下载地址

制作步骤:

第一步:将springboot项目打包成MyServer.jar

第二步:将下载的WinSW.NET2.exe 改名为MyServer.exe

第三步:将下载的sample-minimal.xml 改名为MyServer.xml

第四步:注册和启动服务

这里重点介绍 sample-minimal.xml 文件

<service>
<!-- Windows 服务唯一标识ID-->
<id>My Server</id>
<!-- Windows 服务名称-->
<name>My Server</name>
<!-- Windows 服务描述-->
<description>This service is a service cratead from a minimal configuration</description>
<!-- 启动的可执行文件的路径,如果已经配置环境变量,则不必写全路径(则其实是一个坑) -->
<executable>java</executable>
<arguments> -jar MyServer.jar --spring.datasource.url=jdbc:mysql://localhost:3306/database </arguments>
<!-- 日志路径,若目录不存在,则默认为配置文件所在的同一目录-->
<logpath>ServerPath\log\dashboard\</logpath>
<!-- 日志模式,默认为append追加模型,rotate为旋转模式-->
<logmode>rotate</logmode>
</service>

executable:启动可执行文件的全路径,如果配置环境变量,则可以简写,所有这里填写Java

arguments:命令执行的参数

logpath:配置日志路径

logmode:日志输出模式,默认为append,官方文档

  • append (追加模式)其特点是将日志文件全部输出在一个文件中,这个文件可能会越来越大。
  • rotate(旋转模式,推荐)当日志文件大小达到10兆(默认值),winsw会将日志重新输出到另外一份日志文件,最多保留8个(默认值)。
  • reset(重置模式)每次重启服务都会重置日志文件。
  • none(忽略模式)几乎不会生成日志文件。

winsw常用命令

  • MyServer.exe install:安装服务
  • MyServer.exe uninstall:删除服务
  • MyServer.exe start:启动服务
  • MyServer.exe stop:停⽌服务
  • MyServer.exe restart:重启服务
  • MyServer.exe status:输出当前服务的状态

MyServer.exe 是WinSW.NET2.exe文件。在win10系统上一次成功,没有多余的烦恼。可生活哪有这么容易,在windows server 2012 r2的系统上启动失败。有错误不可怕,可怕的是不会找错误日志。

启动windows服务失败

服务启动成功后自动关闭,配置的日志文件也没有生成。尝试用cmd执行java -jar的命令,服务可以正常启动。但可具体是什么错误却不得而知。其实Windows服务是有日志管理的。选择:控制面板---管理工具---事件查看器---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改为了全路径。重新注册服务并启动,结果服务启动成功了。一肚子的火不知道往那撒。

为了避免这种事情再次发生,决定将executable的内容设置成Java的全路径,于是简单写了一个bat文件。

@echo off
# 获取java环境变量
set JAVA_HOME=%JAVA_HOME%
echo %JAVA_HOME%
# 替换java路径
setlocal enabledelayedexpansion
set file=%cd%\MyServer.xml
set file_tmp=%cd%\MyServer_tmp.xml
set source=JAVAHOME
set replaced=%JAVA_HOME%\bin\java for /f "delims=" %%i in (%file%) do (
set str=%%i
set "str=!str:%source%=%replaced%!"
echo !str!>>%file_tmp%
)
move "%file_tmp%" "%file%"
# 注册并启动服务
MyServer.exe uninstall
MyServer.exe install
MyServer.exe start
EXIT

SpringBoot注册Windows服务和启动报错的原因的更多相关文章

  1. windows服务安装启动报错误1053:服务没有及时响应启动或控制请求

    <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0&qu ...

  2. SpringBoot启动报错Failed to determine a suitable driver class

    SpringBoot启动报错如下 Error starting ApplicationContext. To display the conditions report re-run your app ...

  3. Elasticsearch 注册windows服务后,服务启动失败,意外终止

    直接双击elasticsearch.bat可以成功启动,注册成服务后就启动失败 从网上查找问题,发现是jdk版本的问题,用ES自带的jdk就可以启动成功. 默认ES会先找JAVA_HOME环境变量,如 ...

  4. 【MongoDB】如何注册windows服务

    一.为什么要注册windows服务 mongodb启动比较麻烦,每次都要cmd去开启.注册windows服务,可以设置开机启动,比较友好. 二.如何注册windows服务 1.安装mongodb 2. ...

  5. 启动多个eclipse 时,因为一个另一个启动报错,

    启动多个eclipse 时,因为一个另一个启动报错, 原因: 可能是 有一个 eclipse  中 的 tomcat  配置出错:preference中  tomcat 配置  context dec ...

  6. Hive启动报错:java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument

    报错详细: Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preco ...

  7. Tomcat7.0.40注册到服务启动报错error Code 1 +connector attribute sslcertificateFile must be defined when using ssl with apr

    Tomcat7.0.40 注册到服务启动遇到以下几个问题: 1.启动报错errorCode1 查看日志如下图: 解决办法: 这个是因为我的jdk版本问题,因为电脑是64位,安装的jdk是32位的所以会 ...

  8. windows修改系统登录密码后,出现SQLserver服务无法启动,启动报错17051

    windows修改系统登录密码后,出现SQLserver服务无法启动,启动报错17051具体报错如下: 根据错误提示,去到windows的事件查看器.在win10上,右击左下角的菜单图标:然后依次点击 ...

  9. SVN 服务启动报错 0x8007042a

    服务器环境:Windows Server 2008 R2 企业版,Visual SVNServer 2.6.5 不能签出代码,发现svn服务关闭,手动启动报错: 事件查看器: Error: no li ...

随机推荐

  1. Dynamics 365-关于BPF的进一步探究

    关于BPF是什么,以及如何在CRM中配置BPF,可以参阅熊宸大神的博客Dynamics 365 Business Process Flow -- 让你不再惧怕复杂的业务流程! 1. CRM中发生了什么 ...

  2. java:编程比赛中有用的方法整理(一)数组

    我曾经参加过几次编程比赛,但是当时用的是c语言,现在学习了java,打算专攻java组,故以此整理. 数组无论在哪里都必不可少. 一.数组的拷贝: 使用Arrays类的copyOf方法: 1.将一个数 ...

  3. 阿里云服务器,Sql Server 本地连接服务器端问题记录

    1.如果你是阿里云服务器,配置参数都整好了并且排除了防火墙问题(关闭了防火墙),依然没有连接上,那就先考虑这个问题 问题:阿里云服务器的SQLServer不允许远程连接 原因:因为除了服务器上的防火墙 ...

  4. Spring JPA 使用@CreatedDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy 自动生成时间和修改者

    JPA Audit 在spring jpa中,支持在字段或者方法上进行注解@CreatedDate.@CreatedBy.@LastModifiedDate.@LastModifiedBy,从字面意思 ...

  5. Windows中通过命令行启动打开Service 管理工具

    经常需要打开Services 管理工具操控Service 的启动,停止. 通过控制面板 --> 管理工具 -->Service  太慢. 学到一个快捷方式. windows + R  启动 ...

  6. iis问题

    1.8.5版本的iis配置完成,不能打开网页显示503.原因是应用程序池,加载用户配置文件失败,然后应用程序池关闭了.关闭它就可以正常打开了. server2008,打不开网页,打开url显示目录的原 ...

  7. 使用ranger对kafka进行鉴权

    使用ranger对kafka进行鉴权测试环境:ranger-kafka-plugin为0.6.3版本,kafka版本为kafka_2.10-0.10.1.1,且kafka broker为一个节点.一. ...

  8. Windows下切分文件(GnuWin32)

    windows下碰到查看大日志文件还真麻烦,今天找了个工具来做这个:安装GnuWin32,然后用里面的split命令分割日志文件 ps:发现intellij idea还挺好,超过2g的日志文件也能进行 ...

  9. 随心测试_软测基础_007<软测学习路线建议>

    如果你对软测感兴趣,那么如何学习软件测试呢? 贴心小提示:以下内容,仅供参考,不挖坑 1:学习方式_职业教育选择观 ————SX的观点:成本 | 收益说,理性接受 软测产业服务链中,测试工程师重在于& ...

  10. JAVA 调用exe程序执行对应的文件 (个人用于编译Java文件)

    需求: 需要利用Java程序,来调用计算机本身的黑窗口,来将特定的Java文件编译成对应的字节码文件. 实现思路: 通过调用Java的Runtime类,每个 Java 应用程序都有一个 Runtime ...