zoukankan      html  css  js  c++  java
  • winsw打包jar

    参考:

    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: mpdongliServiceDongLi.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 ginx ginx-1.15.2 ginx.exe</executable>
    </service>

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

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

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

  • 相关阅读:
    【转】ASP.NET页面刷新方法总结
    GridView点击超链接时弹出小窗口
    VS2008增加AJAX Control Toolkit3.5支持(组图)
    水晶报表中"已达到系统管理员配置的最大报表处理作业数限制"错误的处理
    asp.net 在使用Response.Redirect try{}catch{}块失效
    【转】ASP.NET的五大数据控件浅谈
    ASP.NET生成随机密码
    ASP.NET Web应用程序和ASP.NET网站的区别
    使用ArcGIS GP服务之一框架介绍
    mysql索引的类型和优缺点
  • 原文地址:https://www.cnblogs.com/xinglongbing521/p/11157742.html
Copyright © 2011-2022 走看看