Java Service Wrapper 将Java工程打包成Windows服务

今天写了一个很有趣的程序,每隔10秒刷一次某网站,提高网站流量。程序是通过MAIN方法运行的,我想打包成WINDOWS服务,这样我就不用打开Myeclipse运行了,将来如果要部署到服务器上也很方便,工作时听同事用过Java Service Wrapper,于是去官网了解了一下。花了1个小时,终于配置好了!部署完成后会有一个wrapper.log,它会记录你在程序里所有的System.out.print以及错误信息。

这里分享一下如何部署Java Service Wrapper,操作非常简单!

简单的说只需要将JAVA工程打包成JAR放到LIB目录下,然后改一下CONF下的配置即可。

一、前期准备,首先,下载Java Service Wrapper,http://sourceforge.net/projects/wrapper/files/ (国外网站,可能有时候无法下载,也可以使用VPN下载),若无法下载可以去这里:http://download.csdn.net/detail/programmer_sir/7877107

下载后解压,目录结构如下显示:


 bin:里面是可执行文件,安装服务、启动服务、重启服务等。

 conf:这是核心配置。所有配置均在这个目录下。(参考以下“配置CONF”)

 lib:如果你的项目有很多LIB做支持,可以放在这个目录下,当然也可以新建一个,只需要Conf里配置下路径即可。

 二、将java工程打包成jar.

 我在myeclipse里新建了一个JAVA工程,如下结构:

写了一个Hello类,源码如下:

package org.wrapper;

/**
 * 小程序。
 * 每3秒说一次“你好,这是我的第一个Java Service Wrapper.”
 * */
public class Hello {
	
	int i = 1;
	
	public void start(){
		while (true) {
			try {
				Thread.sleep(3*1000);
				System.out.println(i++ + "次说你好,这是我的第一个Java Service Wrapper.");
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	public static void main(String[] args){
		new Hello().start();
	}

}

 然后将这个JAVA工程打包成JAR,打包步骤如下:

 在JAVA工程上右键--->Export--->java--->JAR File--->Next--->在JAR file位置选择路径--->Finish。

 将打包的JAR放在LIB目录下,如果JAVA工程下有很多扩展的LIB,都可以拷贝到lib目录下或者自己新建一个文件夹。

 三、配置Conf。

 打开conf文件夹,找到wrapper.conf

1、wrapper.java.command=java

如果你的本机装了JRE,也就是如果装了JDK,这条可以跳过。如果没装,那需要将JDK整个文件夹下的JRE全复制到此根目录下(并且需要修改wrapper.java.command=找到JDK的JRE路径+java.exe)。实际上我建议是安装JDK。省事!

2、配置主方法,也就是服务启动时自动调用的类。

#填写服务启动调用的类(包名+类名)。如下:

wrapper.app.parameter.1=org.wrapper.Hello(wrapper.app.parameter.1默认是被#注释了的,记得去掉“#”)。

3、配置JAVA工程JAR路径。

上面用Myeclipse打包的JAR在这里要配置一下,找到

wrapper.java.classpath.1=../lib/wrapper.jar改成wrapper.java.classpath.1=../lib/*.jar

(“*”代表默认加载LIB下所有JAR)

如果要加多个不同文件夹下的LIB,那么可以在加wrapper.java.classpath.2=写你的路径。

4、配置内存大小。

配置程序运行的所需要的内存大小
# Initial Java Heap Size (in MB)
#wrapper.java.initmemory=3
# Maximum Java Heap Size (in MB)
#wrapper.java.maxmemory=64
可以改成(根据情况设置)
# Initial Java Heap Size (in MB)
wrapper.java.initmemory=64
# Maximum Java Heap Size (in MB)
wrapper.java.maxmemory=128

5、其它配置

# Name of the service
wrapper.name=Hello JavaServiceWrapper

# Display name of the service
wrapper.displayname=Hello JavaServiceWrapper

# Description of the service
wrapper.description=这是我的第一个WINDOWS服务。


#windows服务是否自动启动
wrapper.ntservice.starttype=AUTO_START

我的CONF配置如下:

wrapper.lang.folder=../lang
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp

# Java Classpath (include wrapper.jar)  Add class path elements as
#  needed starting from 1
wrapper.java.classpath.1=../lib/*.jar
#wrapper.java.classpath.2=其它LIB在这里配置。

# Java Library Path (location of Wrapper.DLL or libwrapper.so)
wrapper.java.library.path.1=../lib

# Java Bits.  On applicable platforms, tells the JVM to run in 32 or 64-bit mode.
wrapper.java.additional.auto_bits=TRUE

# Java Additional Parameters
wrapper.java.additional.1=

# Initial Java Heap Size (in MB)
#wrapper.java.initmemory=64

# Maximum Java Heap Size (in MB)
#wrapper.java.maxmemory=128

# Application parameters.  Add parameters as needed starting from 1
wrapper.app.parameter.1=org.wrapper.Hello

wrapper.console.format=PM
wrapper.console.loglevel=INFO
wrapper.logfile=../logs/wrapper.log
wrapper.logfile.format=LPTM
wrapper.logfile.loglevel=INFO
wrapper.logfile.maxsize=0
wrapper.logfile.maxfiles=0
wrapper.syslog.loglevel=NONE
wrapper.ignore_sequence_gaps=TRUE
wrapper.pidfile.strict=TRUE
wrapper.console.title=Test Wrapper Sample Application
wrapper.check.deadlock=TRUE
wrapper.check.deadlock.interval=10
wrapper.check.deadlock.action=RESTART
wrapper.check.deadlock.output=FULL
wrapper.filter.trigger.999=wrapper.filter.trigger.*java.lang.OutOfMemoryError
wrapper.filter.allow_wildcards.999=TRUE
wrapper.filter.action.999=NONE
wrapper.filter.trigger.1000=[Loaded java.lang.OutOfMemoryError
wrapper.filter.action.1000=NONE
wrapper.filter.trigger.1001=java.lang.OutOfMemoryError
wrapper.filter.action.1001=RESTART
wrapper.filter.message.1001=The JVM has run out of memory.
wrapper.event.jvm_restart.email.body=The JVM was restarted.\n\nPlease check on its status.\n
wrapper.name=Hello JavaServiceWrapper
wrapper.displayname=Hello JavaServiceWrapper
wrapper.description=这是我的第一个WINDOWS服务。
wrapper.ntservice.dependency.1=
wrapper.ntservice.starttype=AUTO_START
wrapper.ntservice.interactive=false


6、LIB目录下.bat解释

安装服务:InstallApp-NT.bat

启动服务:StartApp-NT.bat

暂停服务:auseApp-NT.bat

重启服务:ResumeApp-NT.bat

停止服务:StopApp-NT.bat

卸载服务:UninstallApp-NT.bat

上述配置完成后,点击InstallApp-NT.bat安装服务,然后在启动服务StartApp-NT.bat,此时可以在logs目录下查看wrapper.log。

STATUS | wrapper  | 2014/09/07 22:24:48 | Launching a JVM...
INFO   | jvm 1    | 2014/09/07 22:24:48 | WrapperManager: Initializing...
STATUS | wrapperm | 2014/09/07 22:24:52 | Hello JavaServiceWrapper started.
INFO   | jvm 1    | 2014/09/07 22:24:51 | 1次说你好,这是我的第一个Java Service Wrapper.
INFO   | jvm 1    | 2014/09/07 22:24:54 | 2次说你好,这是我的第一个Java Service Wrapper.
INFO   | jvm 1    | 2014/09/07 22:24:57 | 3次说你好,这是我的第一个Java Service Wrapper.
INFO   | jvm 1    | 2014/09/07 22:25:00 | 4次说你好,这是我的第一个Java Service Wrapper.
INFO   | jvm 1    | 2014/09/07 22:25:04 | 5次说你好,这是我的第一个Java Service Wrapper.
INFO   | jvm 1    | 2014/09/07 22:25:06 | 6次说你好,这是我的第一个Java Service Wrapper.
INFO   | jvm 1    | 2014/09/07 22:25:09 | 7次说你好,这是我的第一个Java Service Wrapper.
INFO   | jvm 1    | 2014/09/07 22:25:12 | 8次说你好,这是我的第一个Java Service Wrapper.
INFO   | jvm 1    | 2014/09/07 22:25:16 | 9次说你好,这是我的第一个Java Service Wrapper.
INFO   | jvm 1    | 2014/09/07 22:25:18 | 10次说你好,这是我的第一个Java Service Wrapper.
INFO   | jvm 1    | 2014/09/07 22:25:21 | 11次说你好,这是我的第一个Java Service Wrapper.
INFO   | jvm 1    | 2014/09/07 22:25:24 | 12次说你好,这是我的第一个Java Service Wrapper.
INFO   | jvm 1    | 2014/09/07 22:25:28 | 13次说你好,这是我的第一个Java Service Wrapper.
INFO   | jvm 1    | 2014/09/07 22:25:30 | 14次说你好,这是我的第一个Java Service Wrapper.
INFO   | jvm 1    | 2014/09/07 22:25:33 | 15次说你好,这是我的第一个Java Service Wrapper.
INFO   | jvm 1    | 2014/09/07 22:25:37 | 16次说你好,这是我的第一个Java Service Wrapper.

再查看Windows 服务,一切OK。


四、异常处理

1、如果报org.tanukisoftware.wrapper.test.Main不存在。

wrapper.java.mainclass=org.tanukisoftware.wrapper.test.Main
修改成
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp

总之,如果报相关类不存在,就要仔细查看配置路径,以及LIB是否全等。

2.、所有错误均记录在log/wrapper.log下。

3、JVM did not exit on request, terminated ,如果报此错误说明你没有按我上面写的去配置,而是将主程序配置在了wrapper.java.mainclass,其实这种配置方式也可以,只是与我的写法不一样而已,如果你非要写在manclass,那具体解决方案可参考:http://bbs.csdn.net/topics/90143848  查看10楼回答。

4、There were 5 failed launches in a row, each lasting less than 300 seconds.  Giving up。此错误是由于配置主方法导致的,注意wrapper.app.parameter.1的路径以及是否去掉了它前面的#。

五、源码配置打包免费下载

http://download.csdn.net/detail/programmer_sir/7877797

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值