分享免费的编程资源和教程

网站首页 > 技术教程 正文

JavaService Wrapper 介绍与应用(java -server)

goqiw 2025-02-04 14:01:48 技术教程 19 ℃ 0 评论

1、概述

使用java开发程序,一般有web应用,后台服务应用,桌面应用:

web应用多数打成war包在web容器(如tomcat,jetty等)中运行 桌面应用一般打成jar包或exe文件运行 后台服务应用一般打成jar包,然后使用命令行(如java -jar xxx.jar)运行 前面两种运行方式在本文不作讨论,主要描述java开发的后台服务程序(如定时任务程序,文件处理,数据备份等)。

1.1、为什么要用服务形式运行

若使用命令行方式运行java程序,把命令写成脚本(如bat脚本)运行即可,但命令行方式有其不方便之处,如命令行窗口不能关闭,关闭即停止,因此维护人员容易误操作(关闭窗口使程序停止);若服务器宕机或其它原因,程序往往无法在服务器重启时自动启动。在windows下,很多程序都是以服务的形式运行,这也符合windows的管理。因此,建议使用服务形式运行,操作方便。

1.2、如何让java程序以服务形式运行

有几种方法可以让java程序以服务形式运行:

Java Service Wrapper:目前业界最知名、最成熟的解决方案,添加任何额外的代码即可使用。Yet Another Java Service Wrapper类似JSW的开源实现版本,不过官方支持不怎么好。 Apache Commons Daemon:著名的Apache Commons工具包的成员,按规则添加启动程序,再编写脚本实现。 其它的:(如WinRun4J,Launch4j)未使用过,更多可参考java开源打包工具

本文主要讲解使用java service wrapper把java程序作为服务运行,它不需要添加任何代码,配置即可。

Java Service Wrapper 顾名思义就是将java程序包装成系统程序,这样可以随着系统的运行而运行。换句话说 JSW可以将我们的java后台程序包装成一个后台服务运行。除此之外,JSW还可以在java程序挂掉以后自动拉起服务,相当于提供了一个守护进程。JSW主要目标就是,单点服务尽可能做到高可靠,程序挂了之后立马拉起,这样能够大大降低运维成本。

  JSW除了支持 Windows和Linux还支持其他平台,几乎包含了所有的系统环境,十分强大,JSW分为社区版和企业版,社区版开源并且免费,企业版收费但是功能更加强大!

  特性:1、多平台支持,主支主流的服务器操作系统

     2、简单的安装步骤,即可将java程序当成后台进程方式运行

     3、提高Java服务可靠性,当服务挂了立马拉起

     4、无需编写脚本,灵活配置,可定制化JSW的配置和JVM的配置

     5、Log功能(针对Java标准控制台输出生成warpper.log)

  上述内容说到,JSW可以充当我们的守护进程,当服务挂掉以后JSW能够自动拉起(RESTART),当JVM hung时间过长时,也会将服务重启。

  JSW两个概念:JSW守护和wrapper。守护进程用来守护我们的应用程序,挂掉后立马拉起。而wrapper实际上就是在我们的应用程序上包装了一层。JSW守护进程会开启一个ServerSocket监听端口(服务端)。而对于wrapper,内部会开启一个Socket(客户端)连接到守护进程的ServerSocket监听端口上。守护进程在wrapper连接上自己以后,就会定期地发送ping包给wrapper,wrapper收到以后,会返回一个包,告诉守护进程自己没问题,I’m ok ! 。若守护进程在一定时间内没有收到wrapper返回的包,则认定JVM(我们的应用程序)hang住了。

以CentOS(linux)系统为例,结合比较常用的maven工具进行打包与发布。

2. 下载Wrapper

Wrapper下载地址:http://wrapper.tanukisoftware.com/doc/english/download.jsp Wrapper几乎支持所有的系统环境,目前最新版本为3.5.40,下载Linux x86 64bit版本。

3.示例程序

3.1生成启动脚本之前,需要有一个启动的类,示例如下:

package cn.easyolap.jsw; 

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class JSWServer {
    public static void main(String[] args) {
        SpringApplication.run(JSWServer.class, args);
    }
}

3.2生成可执行的启动脚本


	org.codehaus.mojo
	appassembler-maven-plugin
	1.10
	
        
            package
            
            generate-daemons
            assemble
            
            
    
	
		
		
			windows
			unix
		
		
		${project.build.directory}/dist
		src/layout
		
		lib
		
		bin
		
		conf
		
		true
		
		src/main/resources
		
		flat
		UTF-8
		logs
		tmp
		
			
				mall
				
				cn.easyolap.jsw.JSWServer
				
					
						-server
						-Xmx2G
						-Xms2G
					
				
			
		
	

执行 mvn package 或mvn appassembler:assemble

执行完成之后,在target/dist目录就有可执行脚本

3.3生成后台服务程序


	org.codehaus.mojo
	appassembler-maven-plugin
	1.10
	
		
		${project.build.directory}/dist
		
		lib
		
		bin
		
		conf
		
		true
		
		src/main/resources
		
		flat
		UTF-8
		logs
		tmp
		
			
				beyond
				cn.easyolap.jsw.JSWServer
				
					jsw
				
				
					
						jsw
						
							linux-x86-32
							linux-x86-64
							windows-x86-32
							windows-x86-64
						
						
							
								configuration.directory.in.classpath.first
								conf
							
							
								wrapper.ping.timeout
								120
							
							
								set.default.REPO_DIR
								lib
							
							
								wrapper.logfile
								runtime/logs/wrapper.log
							
						
					
				
				
					
					
						com.sun.management.jmxremote
						com.sun.management.jmxremote.port=1984
						com.sun.management.jmxremote.authenticate=false
						com.sun.management.jmxremote.ssl=false
					
				
			
		
	


    maven-assembly-plugin
    2.5.3
    
    	beyond-${project.version}
    	src/assembly.xml
    
    
        
            create-archive
            package
            
            single
            
        
    

assembly.xml文件内容:


	bin
	beyond-server
	
		tar.gz
		zip
	
	
        
            ${project.build.directory}/dist/jsw/beyond/bin
            /bin
            0755
        
        
            ${project.build.directory}/dist/jsw/beyond
            /
            
                **
            
        
	

执行mvn clean package 执行完成之后,在target\beyond-0.1.0-bin.zip和beyond-0.1.0-bin.tar.gz目录里面就有后台运行的程序

4.解压后运行测试

./bin/beyond

Usage: ./beyond{ console | start | stop | restart | status | dump }

Commands:

  1. console 启动并显示控制台信息
  2. start 作为一个守护进程后台启动
  3. stop 停止程序
  4. restart 重启程序
  5. condrestart 重启已经运行的程序,与前者区别是程序必须已经在运行
  6. status 查看该程序状态
  7. install 将程序安装为自启动服务,即随系统启动而启动
  8. remove 卸载自启动服务
  9. dump 报告运行时的Java thread dump(thread dump

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表