使用winsw将springboot打包的jar注册系统本地服务
1、下载winsw
下载地址:https://github.com/kohsuke/winsw/releases
我这里下载的是2.3.0版。

下载sample-minimal.xml和WinSW.NET4.exe两个文件。

2、将三个文件放在同一个文件夹中
WinSW.NET4.exe
sample-minimal.xml
springboot jar包

3、修改文件名字
需要将winsw执行程序跟xml改成同样的名字,推荐使用项目名+Service的命名方式,比如:
WinSW.NET4.exe修改为rexel-middleware-0.0.1.exe
sample-minmal.xml修改为rexel-middleware-0.0.1.xml

4、编辑xml文件

配置内容
<configuration>
<!--安装成Windows服务后的服务名-->
<id>rexel-middleware</id>
<!--显示的服务名称-->
<name>rexel-middleware</name>
<!--对服务的描述-->
<description>rexel-middleware for hzzg project</description>
<!--这里写java的路径,如何配置了环境变量直接写"java"就行-->
<executable>java</executable>
<!---jar后面的是项目名,可以配置内存限制如-Xmx256m代表堆内存最大值为256MB -->
<arguments>-jar rexel-middleware-0.0.1.jar</arguments>
<!--日志模式-->
<logmode>rotate</logmode>
</configuration>
5、执行命令安装服务
打开系统命令行窗口,进入到rexel-middleware-0.0.1.exe所在文件夹,
然后执行命令安装服务命令:rexel-middleware-0.0.1.exe install。
执行发现报错如下:

错误日志:
D:\MyWork\22_Github\rexel-cn\rexel-jarvis\rexel-middleware\install>rexel-middleware-0.0.1.exe install
2019-12-02 10:25:24,938 INFO - Installing the service with id 'myapp'
2019-12-02 10:25:24,964 FATAL - WMI Operation failure: AccessDenied
WMI.WmiException: AccessDenied
在 WMI.WmiRoot.BaseHandler.CheckError(ManagementBaseObject result)
在 WMI.WmiRoot.ClassHandler.Invoke(Object proxy, MethodInfo method, Object[] args)
在 winsw.WrapperService.Run(String[] _args, ServiceDescriptor descriptor)
在 winsw.WrapperService.Main(String[] args)
WMI.WmiException: AccessDenied
在 WMI.WmiRoot.BaseHandler.CheckError(ManagementBaseObject result)
在 WMI.WmiRoot.ClassHandler.Invoke(Object proxy, MethodInfo method, Object[] args)
在 winsw.WrapperService.Run(String[] _args, ServiceDescriptor descriptor)
在 winsw.WrapperService.Main(String[] args)
解决方法:
使用管理员权限重新打开cmd窗口,重新执行rexel-middleware-0.0.1.exe install

6、启动服务
命令提示符界面输入命令启动服务。
命令:net start rexel-middleware

7、查看是否启动成功
打开系统服务功能:运行——输入services.msc
即可看见自己命名的服务rexel-middleware。

我的java程序是一个从外部接口定时拉取数据,并写入到mysql的程序,
可以看到已经在开始写入数据了,证明程序运行成功。

8、重启测试
重启电脑后该服务会自动启动,执行第6步(net start rexel-middleware)可检查是否成功。
9、删除服务
分为两步:
步骤1:停止服务
命令提示符界面输入命令停止运行服务:net stop rexel-middleware

步骤2:删除服务
命令提示符界面输入命令可删除服务:rexel-middleware-0.0.1.exe uninstall

10、修改为批处理文件
上面所有的命令都可以写在批处理文件中,部署的时候就可以实现一键部署了。
例如start.bat内容如下:
rexel-middleware-0.0.1.exe install
net start rexel-middleware
例如stop.bat内容如下:
net stop rexel-middleware
rexel-middleware-0.0.1.exe uninstall
--END--
使用winsw将springboot打包的jar注册系统本地服务的更多相关文章
- springboot打包成jar包后找不到xml,找不到主类的解决方法
springboot打包成jar包后找不到xml,找不到主类的解决方法 请首先保证你的项目能正常运行(即不打包的时候运行无误),我们在打包时经常遇到如下问题: springboot打包成jar包后找不 ...
- 在Windows下将Redis注册为本地服务
当前redis版本:3.2.100 通常情况下我们可以通过 redis-server.exe 和配置文件启动redis服务 : redis-server.exe redis.windows.conf ...
- 【spring boot】idea下springboot打包成jar包和war包,并且可以在外部tomcat下运行访问到(转)
转自:https://www.cnblogs.com/sxdcgaq8080/p/7727249.html 接着上一章走呗:http://www.cnblogs.com/sxdcgaq8080/p ...
- 关于springboot 打包问题 jar包和 war包
起因:项目开发完成 需要打包部署了 发现自己不会打包 那么开始网上学习打包? 那么怎么来打包那? 我们以前没有采用springboot 时候我们都是直接将项目打成war包形式 然后放到tomc ...
- 【spring boot】6.idea下springboot打包成jar包和war包,并且可以在外部tomcat下运行访问到
接着上一章走呗:http://www.cnblogs.com/sxdcgaq8080/p/7712874.html 然后声明一点,下面打包的过程中,scope一直都是使用默认的范围 <!--用于 ...
- idea下springboot打包成jar包和war包,并且可以在外部tomcat下运行访问到
接着上一章走呗:http://www.cnblogs.com/sxdcgaq8080/p/7712874.html 然后声明一点,下面打包的过程中,scope一直都是使用默认的范围 <!--用于 ...
- springboot打包的jar项目,不需要安装jdk环境启动
因为服务器上是JDK7,而springboot至少用JDK8才行,但是又因为是很老的项目,不是很清楚能不能换JDK8,有风险,因此选择以前项目用JDK7,而新的springboot用JDK8.步骤一: ...
- idea将springboot打包成jar或者war
1.首先在pom.xml中添加下面配置 <groupId>com.melo</groupId> <artifactId>focus</artifactId&g ...
- springboot打包成jar文件无法正常运行,解决办法已经找到
1.用intellij idea 创建了一个springboot的项目,前期都运行的好好的,在ide中可以正常运行,但是打包成Jar运行却一直报错. 2.经过不懈探索,终于找到解决办法 3.首先,找到 ...
随机推荐
- Nfs固定端口 nfs 端口公网映射
- layui的select下拉框太长被遮挡了的解决办法
layui的select下拉框太长采用滚动条的形式出现,可以给select的dl加一个最大高度,具体的效果如下图 .layui-form-select dl { max-height:160px; }
- ES6深入浅出-11 ES6新增的API(上)-1.Object.assign
这些都是es6才有的 Object.assign 在a加上三个属性 分别是p1\p2\p3 以前是这么去加 b的三个属性p1.p2.p3就全部复制到a这个对象上了. 把后面的东西放到前面的东西上 两个 ...
- 【428】Dijkstra 算法
算法思想:(单源最短路径) 1个点到所有其他点的最短路径 查找顶点到其他顶点的最短路径,无法到达的记为+∞,找到最小的,就找到了最短路径的顶点 查看上一轮找到的最小点到达其他点的最小值,找到最短路径的 ...
- layer confirm 三种选择按钮
layer.confirm('请选择是否通过提现?(tips:同意直接打款,驳回不可恢复)', { btn : ['通过-打款','不通过','通过-已打款'], btn1:function(){ a ...
- 机器学习中的数学-线性判别分析(LDA)
前言在之前的一篇博客机器学习中的数学(7)——PCA的数学原理中深入讲解了,PCA的数学原理.谈到PCA就不得不谈LDA,他们就像是一对孪生兄弟,总是被人们放在一起学习,比较.这这篇博客中我们就来谈谈 ...
- ready与load的区别
JQuery里有ready和load事件 $(document).ready(function() { // ...代码... }) //document ready 简写 $(function() ...
- mysql函数IFNULL的使用替换递归方法
在电商行业经常遇到的问题就是类目与类目以及类目与商品的关系. 如果要查询一级类目下的所有商品 常规做法是先查询该一级类目下所有的二级类目,再由二级类目查询所有的三级类目,直到最后一级,再查询出对应的商 ...
- windows命令行 共享文件夹
net share dpantemp2 /DELETEnet share dpantemp2=d:\temp2 /GRANT:jk,FULL /REMARK:" web api 共享&quo ...
- 老司机带大家领略MySQL中的乐观锁和悲观锁
原文地址:https://cloud.tencent.com/developer/news/227982 为什么需要锁 在并发环境下,如果多个客户端访问同一条数据,此时就会产生数据不一致的问题,如何解 ...