参考:

https://www.jianshu.com/p/fc9e4ea61e13

https://blog.csdn.net/qq_28566071/article/details/80882503

spring官方推荐使用winsw来将springboot项目作为服务运行,参考https://docs.spring.io/spring-boot/docs/1.5.9.RELEASE/reference/htmlsingle/#deployment-windows

1.把java程序打包为jar包

2.下载winsw

winsw是一款可将可执行程序安装成Windows Service的开源工具,github:https://github.com/kohsuke/winsw/releases

前言
由于我们公司java应用是部署在windows服务器上的,jenkins在部署spring boot时会一直等待直到超时才结束,这个主要原因是因为spring boot 启动一直是在前台运行(控制台一直在打印),所以jenkins会认为这个任务没有执行完成,就会一直在执行。如果是linux系统可以使用nohup命令,但windows就不行,没这个命令,所以我把java 应用做成windows服务,每次部署成功只要重启服务即可。

winsw制作windows服务器
winsw(github地址源码地址,exe下载地址,官方英文安装文档)是一个开源的专门用于制作windows服务的小工具,我们可以利用它来讲java程序做成windows服务。
在下载地址里下载最新版winsw。
准备三样东西

xxx.jar
xx.xml
xxx.exe
以MyApp.jar为例,注意xml和exe名字要保持一致。新建一个project文件夹

创建MyApp.xml文件
<service>
<id>MyApp</id>
<name>MyApp</name>
<description>This runs Spring Boot as a Service.</description>
<env name="MYAPP_HOME" value="%BASE%"/>
<executable>java</executable>
<arguments>-Xmx256m -jar "%BASE%\MyApp.jar"</arguments>
<logmode>rotate</logmode>
</service>

上面的MYAPP_HOME是系统环境变量,我们需要像设置JAVA-HOME一样设置。地址指向jar文件地址,当然如果我们不使用环境变量的方式,那就直接在xml里指定jar的目录地址。我就是这样的方式。所以我的MyApp.xml文件为

<configuration>

<!-- ID of the service. It should be unique accross the Windows system-->
<id>OSCAR</id>
<!-- Display name of the service -->
<name>OSCAR(powered by WinSW)</name>
<!-- Service description -->
<description>这是winsw生成的服务</description>

<!-- Path to the executable, which should be started -->
<executable>java</executable>
<arguments>-jar mingpeng-0.0.1-SNAPSHOT.jar</arguments>
<!-- 开机启动 -->
<startmode>Automatic</startmode>

<!-- 日志配置 -->
<logpath>logs/service</logpath>

<logmode>rotate</logmode>

</configuration>

arguments是java命令后的一些参数,是自定义的。
id和name就是注册到windows服务的名字,建议和文件名保持一致,这里就是MyApp

创建MyApp.exe
其实不是重新创建而是重命名,将下载的winsw.exe重命名为MyApp.exe。注意名字要和MyApp.xml保持一致
官方这么说的:you have to rename the winsw.exe to MyApp.exe so that its name matches with the MyApp.xml,注意是必需

创建MyApp.jar
将准备好的jar重命名为MyApp.jar,当然,这个可以不是MyApp,也可以是其它的。比如MyApp.xml里的配置是这样的

<arguments>-Xmx256m -jar "myApp.jar" --spring.profiles.active=stage --spring.datasource.dbname=donglitestdb --server.port=9982</arguments>
1
是小写。

安装服务
至些就制作完成,就可以使用install/uninstall命令了
安装服务:MyApp.exe install
卸载服务:MyApp.exe uninstall
检查状态:MyApp.exe status
启动服务:MyApp.exe start或net start MyApp
停止服务:MyApp.exe stop或net stop MyApp
重启服务:MyApp.exe restart或
windows下没有重启服务,我们可以先stop服务再start服务。批处理如下
restart.bat

net stop %1
net start %1
1
2
重启服务:restart 服务名

问题
如果报“WMI Operation failure: AccessDenied”那就创建一个批处理文件,然后以管理员权限运行,
比如如下installDongLi.bat:

D:\tmp\dongliService\DongLi.exe install
pause
1
2
测试
按如下方式测试结果如下

终于成功了

winsw做包装其它程序
winsw也可以包装其它exe文件,或可启动文件。做成windows服务。以nginx为例
将winsw.exe改名为NginxService.exe
创建NginxService.xml如下

<service>
<id>NginxService</id>
<name>NginxService</name>
<description>This runs Spring Boot as a Service.</description>
<executable>D:\soft\nginx\nginx-1.15.2\nginx.exe</executable>
</service>

将上面文件放到nginx安装文件包下
创建installService.bat批处理文件

D:\soft\nginx\nginx-1.15.2\NginxService.exe install
配置完成后,命令行进入winsw所在的文件夹,执行“spider-1.0.exe install”,就注册服务了。

如果不再需要这个服务,使用spider-1.0.exe uninstall即可卸载服务。start启动和stop关闭服务

转载于:https://www.cnblogs.com/xinglongbing521/p/11157742.html

winsw打包jar相关推荐

  1. spring boot 打包jar,jar没有主目录清单

    (1)spring boot 打包jar   如果有不对的还请指点,知道自己技术部怎么样,第一次写,写的有点乱    理解一下 1.在POM.xml文件下添加如下代码:注意:version.confi ...

  2. 【Java 虚拟机原理】Dalvik 虚拟机 ( 打包 Jar 文件和 Dex 文件 | 反编译 Dex 文件 | 分析 Dex 文件反编译结果 )

    文章目录 前言 一.打包 Jar 文件和 Dex 文件 1.示例代码 2.打包 Jar 文件 3.打包 Dex 文件 二.反编译 Dex 文件 三.分析 Dex 文件 1.Student 类相关信息 ...

  3. java ear war_[转] 基于Java的打包jar、war、ear包的作用与区别详解

    以最终客户的角度来看,JAR文件就是一种封装,他们不需要知道jar文件中有多少个.class文件,每个文件中的功能与作用,同样可以得到他们希望的结果.除jar以外对于J2EE来说还有war和ear.区 ...

  4. android 打包jar包

    昨天,自己用到别人的jar包的内容,后来,公司要求在之前的基础上增加几个功能,所以需要修改jar包的内容.别人的源代码给了我,我修改后进行打包成jar包.不过自己却不会用android studio ...

  5. idea-spark-sbt 打包jar

    1.打开idea下的terminal窗口 2.只打包部分项目 sbt insight-import/clean  insight-import/assembly 这表示只打包主目录下的insight- ...

  6. exe4j打包jar成exe文件(将jdk打包在内)

    用myEclipse -> Export 生成.class文件,然后再用 exe4j 打包工具选择刚导出的 .class 文件 之前用exe4j打包有过示例,按照之前的博客文档http://bl ...

  7. Intellij Idea打包jar

    https://blog.csdn.net/xuemengrui12/article/details/74984731 步骤: 1. 选中Java项目工程名称,在菜单中选择 File->proj ...

  8. Spark利用(idea+maven+scala)创建wordcount打包jar并在spark on yarn上运行——Spark的开发

    今天的你不付昨天的辛苦,今天的辛苦定会拥抱明日的幸福, 每一次的成长,都要给自己以鼓励,每一次的突破,都给自己以信心,万花丛中我不是最美,但我有我的自信 ------------送给一直努力的你 今天 ...

  9. Gradle实践之自定义打包jar+Log开关自动关闭

    2019独角兽企业重金招聘Python工程师标准>>> 上一篇博客介绍了Gradle实践之多渠道自动化打包+版本号管理.由于我在公司里主要是做SDK开发的,这次我想介绍一下如何使用G ...

最新文章

  1. oracle 10g sqlplus登录显示问号,oracle sqlplus 连接时,connection to 显示的是问号
  2. java hbase创建_hadoop组件介绍及python 连接Hbase
  3. Spring IoC 学习(3)
  4. 快捷键 = 效率,但 IDEA 快捷键记不住怎么办?
  5. zookeeper源码分析之一服务端启动过程
  6. 计算机网络简易测试仪,测线仪
  7. Vue 进阶 (二)
  8. ubuntu查看gpu使用率_如何监控GPU卡的使用率(Linux)
  9. BenchmarkDotNet v0.12x新增功能
  10. 数据科学和人工智能技术笔记 十五、支持向量机
  11. php 对象转数组_PHP的垃圾回收机制-PHP高级面试题+详解
  12. Abp VNext 项目创建简介
  13. 认识Spring核心容器IoC/DI
  14. 《恋上数据结构第1季》单向链表、双向链表
  15. Python 标准库 —— string
  16. 黑马程序员————java线程之间的通信
  17. 第三章(循环) 编程题 2
  18. 109 个实用 shell 脚本
  19. linux拷贝文件和目录命令,Linux 命令 - cp: 拷贝文件和目录
  20. c#加粗代码_C# 字体加粗按钮

热门文章

  1. 在Android Studio中使用tess-Two
  2. pycharm ValueError: source code string cannot contain null bytes
  3. VC代码设置禁用窗口最大化按钮禁用拖拽
  4. gaussdb mysql对比_GaussDB(for MySQL)
  5. vue订餐app,使用vue-router
  6. 《现代职业教育》杂志正规吗?现代职业教育杂志社现代职业教育编辑部投稿要求
  7. labview下载地址
  8. Jmeter-PerfMon Metrics Collector监控解析
  9. 大学本科的计算机专业学生,应该达到什么能力水平,才算上合格?
  10. 曙光服务器通过ipmi安装系统,曙光服务器ipmi部署记录资料