JavaService部署Jar包成Windows服务

本文详细介绍如何使用JavaService将Java程序,特别是SpringBoot项目,部署为Windows服务。包括JavaService下载、jar包生成、批处理文件编写及服务安装、卸载等步骤,并解释SpringBoot项目的启动原理。

1.下载JavaService

 百度搜索下载JavaService。

百度云是amd64架构的JavaService 链接:https://pan.baidu.com/s/1Jdv9qnywGVCOwWisqIjQdA  提取码:1234

2. 生成jar包 

(1)export jar ,Eclipse选择如下选项

(2)Idea 直接在pom文件指定打包成jar ,然后运行maven的package生成jar即可。

(3)如果是spring boot项目,pom配置如下。spring boot的主类为org.springframework.boot.loader.JarLauncher。主类可配置可不配置。

<plugins>
    <plugin>
        <groupId>org.spingframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
            <mainClass> org.springframework.boot.loader.JarLauncher </mainClass>
        </configuration>
    </plugin>
</plugins>

3.install.bat文件 

内容为 

JavaService.exe -install Face_Timing "%JAVA_HOME%"\jre\bin\server\jvm.dll  -Djava.class.path="%CD%"\Face_Timing .jar;"%JAVA_HOME%"\lib\tools.jar  -Xms64M  -Xmx512M  -start com.pzg.Timing.App -out "%CD%"\log.log  -err "%CD%"\err.log  -current "%CD%"   -auto 

注意:

(1)"%JAVA_HOME%" 引号必须有,否则如果文件夹路径有空格,会导致将路径当成两个独立的参数,从而导致无法启动。

(2)Face_Timing为服务名。如果本机已经有此服务名,需要删除才能再次安装。sc delete Face_Timing

(3)"%CD%" 代表当前文件所在目录 

(4) -current "%CD%" 指定jar包运行时的jvm工作目录,相当于jar包的相对路径都相对于这个;若不指定,jar程序生成的日志或文件,会保存到C:\Windows\System32目录下。

        请注意current的位置,必须在err后面,否则报错 Unrecognised or incorrectly-ordered parameters for install command。JavaService的参数顺序必须按照语法顺序来,否则报错。

(5)install以后,需要手动开启服务,两种方式

  •  win + r =>输入services.msc => 找到服务 ,第一次需要启动,以后开机会自动启动。
  • net start Face_Timing;

    net stop Face_Timing

        sc delete Face_Timing

(6)如果是spring boot,-start  org.springframework.boot.loader.JarLauncher -method不用写默认即可。

说明:

(1) -install serviceName : 是你要发布服务的名称;

(2)系统环境中设置JAVA_HOME,指定你所需要使用的jre;

(3)在-Djava.class.path中指定你需要运行的jar,这里有个需要注意的地方后面会提到;

(4)-Xms64M  -Xmx512M 设置jvm的基本参数,主要就是内存的分配;

(5)-out -err 重定向控制台输出信息;

        %JAVA_HOME%与环境变量一致,%CD%表示当前的目录路径,参数-start 指定main类的路径com.ecservice.ECService,-method指定类中要调用的方法名StartService,-auto代表服务开机自动启动。

        JavaService一共提供了8个参数可供选择,参数先后顺序必须和下面一致,其命令格式如下:

JavaService -install service_name jvm_library [jvm_options]
        -start start_class [-method start_method] [-params (start_parameters)]
        [-stop start_class [-method stop_method] [-params (stop_parameters)]]
        [-out out_log_file] [-err err_log_file]
        [-current current_dir]
        [-path extra_path]
        [-depends other_service]
        [-auto | -manual]
        [-shutdown seconds]
        [-user user_name -password password]
        [-append | -overwrite]
        [-startup seconds]
        [-description service_desc]

相关参数的作用说明如下:

 service_name:服务名称
 jvm_library:  运行此服务使用的JVM路径
 jvm_option:   运行JVM需要的参数,比如"-Djava.class.path=c:/classes" or "-Xmx128m".
 start_class:  服务启动时运行的主类
 start_method: The method to call in the start_class. default: main
 start_parameters:Parameter(s) to pass in to the start_method.
 stop_class:   The class to load when stopping the service.
 stop_method:  The method to call in the stop_class. default: main
 stop_parameters:      Parameter(s) to pass in to the stop_method.
 out_log_file: A file to redirect System.out into. (gets overwritten)
 err_log_file: A file to redirect System.err into. (gets overwritten)
 current_dir:  The current working directory for the service.
                       Relative paths will be relative to this directory.
 extra_path:   Path additions, for native DLLs etc. (no spaces)
 other_service:        Single service name dependency, must start first.
 auto / manual:        Startup automatic (default) or manual mode.
 seconds:      Java method processing time (startup:sleep, shutdown:timeout).
 user_name:    User specified to execute the service (user@domain).
 password:     Password applicable if user specified to run the service.
 append / overwrite:   Log file output mode, append (default) or overwrite.
 service_desc: Text describing installed service (quoted string, max 1024).

4.uninstall.bat 

 内容为

        JavaService.exe -uninstall Face_Timing

注意:

(1)如果服务正在启动,需要先停止服务再uninstall,否则控制台会输出 ``指定的服务已标记为删除``。

5.运行

        将jar包和install.bat、uninstall.bat放在一个文件夹下,然后管理员模式打开命令窗口进入文件夹,输入install 即可运行install.bat,将jar注册为windows服务。

        然后win+r 输入services.msc ,选择注册的服务启动即可。 可以修改为手动或自动模式。

        windows命令行窗口cd d:/ 360 即可切换文件目录。注意 : 为英文状态。

补充:Spring Boot 为什么 java -jar 可以执行项目?

首先,找个我打好的jar包,举例。

在这里插入图片描述

org:主要存放springboot相关的class文件
META-INF:主要存放maven和MANIFEST.MF文件
BOOT-INF/classes:主要存放应用编译后的class文件
BOOT-INF/lib:主要存放应用依赖的jar包文件

首先找到META-INF文件下的MANIFEST.MF文件。

内容如下:

Manifest-Version: 1.0
Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx
Archiver-Version: Plexus Archiver
Built-By: USER
Spring-Boot-Layers-Index: BOOT-INF/layers.idx
Start-Class: com.layman.file.LaymanFileApplication
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Version: 2.5.6
Created-By: Apache Maven 3.6.3
Build-Jdk: 1.8.0_202
Main-Class: org.springframework.boot.loader.JarLauncher

这里面有两个重要的属性

Start-Class: com.layman.file.LaymanFileApplication
Main-Class: org.springframework.boot.loader.JarLauncher

首先,看最后一行:Main-Class: org.springframework.boot.loader.JarLauncher

当你运行java -jar命令的时候,它会找META-INF文件下的MANIFEST.MF文件中的Main-Class,最后找到org.springframework.boot.loader.JarLauncher

这个JarLauncher,翻译一下,叫做jar包启动器。这个东西是哪来的?

实际上,它是maven打包的时候弄进去的,也就是在pom.xml中定义的spring-boot-maven-plugin插件

<build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

tips:只有添加了spring-boot-maven-plugin插件,运行mvn:package命令后打成的jar包才能直接java -jar 运行。

这个插件在打包时,会生成MANIFEST.MF文件,里面带有JarLauncherjar包启动器)。这个jar包启动器老牛逼了。

当你运行java -jar命令的时候,JarLauncher会将BOOT-INF/classes下的类文件和BOOT-INF/lib下依赖的jar包加载到classpath下。最后调用META-INF下的MANIFEST.MF文件的Start-Class属性来完成应用程序的启动。

也就是说它是SpringBoot Loader提供了一套标准用于执行SpringBoot 打成的JAR包. 

详细原理参考:SpringBoot 的jar包为什么可以直接启动?_胡庚申的博客-优快云博客

参考

​​​​​​【Java程序注册成服务】JavaService.exe将jar注册成win服务方式

使用Porcrun将java程序部署成windows服务 SpringBoot打包部署成Windows服务的详细步骤_Joy老烨头的博客-优快云博客_springboot项目部署到windows

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fang·up·ad

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值