java代码部署到linux_发布Linux说明(Java代码&部署)

文件里面有该文档的压缩包,可下载下来查看

一、 概要说明

我们的Java程序一般在Windows进行编写,但是真正运行一般是运行于Linux服务器(虽然Java是跨平台的)。JavaEE一般运行于Tomcat下面,而对于我们写的控制台应用程序或是服务就需要单独运行了。

我们可以通过Eclipse导出一个jar文件包,在Windows还是Linux都可以通过命令java –jar xxx.jar直接运行,能够看到运行效果。

二、 Eclipse导出jar文件

1、编写代码

首先创建一个Java Project

如果要导出可执行的jar文件,那么我们的Java程序必须要有一个主方法,格式如下:

d60e989611e6582b7ab83bfa0ba278db.png

有了主方法,程序的相关逻辑代码都放置于主方法之内即可。

2、导出jar(传统方式)

选中需要导出的项目,右键→Export→Runnable JAR file

9cc8988761f3b42a1b1f557164c2af4b.png

点击“Next”

64c1a3f30b8ff2e234180e0224698b3e.png

按标识选择后点击“Finish”即可。

3、导出jar(Maven方式)

通过传统方式导出的jar包和第三方包是独立存在的,统一放到指定目录即可。我们也可以通过Maven方式导出jar包,导出的jar包和第三方包都统一在一个jar包里面。

1、修改pom.xml

如果我们不修改pom.xml而直接打包,那么打的包里面就没有第三方jar包,这时候执行就会出错,如下:

b97b0e5d0a798bc515631290b4f8ef3e.png

为了避免这个问题,我们需要修改pom.xml如下

ser_json

org.apache.maven.plugins

maven-compiler-plugin

1.8

1.8

org.apache.maven.plugins

maven-shade-plugin

1.2.1

package

shade

cn.zdsoft.App

如果项目报错,请选择项目并单击鼠标右键→Maven→Update Project…

2、执行打包命令

找到需要打包的项目并单击鼠标右键→Run As→Maven Build…,出现如下界面:

b62b0f7e91e13a79a5954225336729c8.png

输入打包命令“pakage”之后点击”run”。然后看控制台打印出如下内容:

cb6e8ec68b850ac241bc396297542b45.png

表示打包成功,那么我们就可以将项目目录下target目录下的jar包拷贝执行了,此时执行正常

ffbc43048687518a7fbcf5130c7add2e.png

4、运行jar文件

导出成功之后目录结构如下:

c9a04f19821d097ee5d708ffd27d8021.png

请不要破环目录结构,直接通过命令 java –jar write_file.jar即可执行该程序

三、  以服务的形式运行

对于C#来说,我们可以创建Windows服务,而Java中可以通过创建控制台应用程序,然后通过nohup的方式在后台运行,也相当于是一个服务。下面对该内容进行说明。

1、程序停止事件

我们以服务的方式运行时,当程序停止时往往会处理很多的业务,因此我们需要注册监听程序停止事件,这样才能保证程序的正确运行而不丢失数据等。首先需要对Java代码的主方法进行修改。修改后的代码如下:

e56e2611d57cd3aac95466ebf4169c9c.png

2、以nohup方式运行

然后我们将导出的jar包和第三方jar包复制到Linux系统中,存放于/usr/local/write_file。首先以普通方式运行,结果如下:

7fce7bcc6f27e6b3df1e70816fba663e.png

通过ctrl+c可以结束程序,同时结束事件也能正常捕获到停止事件

以nohup方式运行,程序将不会在控制台输出,同时将会在jar包统计目录创建一个文件“nohup.out”,输出的内容全部自动存放于该文件中。

命令:nohup java -jar write_file.jar &

3、结束服务

通过普通方式运行可以用ctrl+c的方式结束运行,而通过nohup方式运行则需要两步,第一步查找当前服务的进程编码,第二步结束进程编码。

查找进程编码:ps -ef|grep write_file.jar

结束编码:kill xxxx

ea84e87bf03e4455ba8936e4d76a0cbb.png

重点说明:

结束服务时非特殊情况不可使用 kill -9 xxxx。因为这种方式相当于Windows的结束进程,那么我们程序无法监听到停止事件,除非程序异常而无法正常停止时使用。

正常情况请使用kill xxxx。

四、  守护程序Supervisor

jar文件运行之后难免会存在异常关闭的情况,为了让程序能在异常关闭后自动启动并继续运行,因此我们需要部署一套进程守护系统,经过多方面对比决定使用Supervisor进行线程守护。本来Supervisor的官网有详细介绍(听说),但是打不开,官网地址:http://supervisord.org/。

1、安装

安装的方式比较简单,就两个命令如下:

1、yum install python-setuptools

2、easy_install supervisor

2、配置

1、创建目录:/etc/supervisor

2、执行命令echo_supervisord_conf > /etc/supervisor/supervisord.conf 将会自动在目录/etc/supervisor下创建配置文件supervisord.conf,同时配置文件的内容也已初始化

3、打开配置文件supervisord.conf,把最后两行的内容修改如下:

[include]

files = conf.d/*.conf

4、创建目录/etc/supervisor/conf.d,同时在该目录下创建文件ProjectName.conf(ProjectName代表需要监控的项目名称)

5、打开ProjectName.conf,然后添加内容如下(注意分号后面是注释,可省略):

[program: ProjectName]

command=nohup java -jar ProjectName.jar &; 运行程序的命令

directory=/root/Publishing/PublishOutput/; 命令执行的目录

autorestart=true ; 程序意外退出是否自动重启

autostart=true ; 是否自动启动

stderr_logfile=/var/log/ProjectName.err.log ; 错误日志文件

stdout_logfile=/var/log/ProjectName.out.log ; 输出日志文件

;environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量

user=root ; 进程执行的用户身份

stopsignal=INT

startsecs=1 ; 自动重启间隔

6、启动

supervisord -c /etc/supervisor/supervisord.conf

7、查看运行状态

ps -ef | grep ProjectName

如下,表示成功

1528765224baf95349be02b85a53d76e.png

如果在执行supervisord命令时出现如下错误:

Error: Another program is already listening on a port that one of our HTTP servers is configured to use.

Shut this program down first before starting supervisord.

For help, use /usr/bin/supervisord –h

则表示Supervisor已经启动,可以通过命令supervisorctl shutdown终止它。

3、开机启动

1、在目录/usr/lib/systemd/system/下创建文件supervisord.service

supervisord.service文件内容如下:

[Unit]

Description=Supervisor daemon

[Service]

Type=forking

ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf

ExecStop=/usr/bin/supervisorctl shutdown

ExecReload=/usr/bin/supervisorctl reload

KillMode=process

Restart=on-failure

RestartSec=42s

[Install]

WantedBy=multi-user.target

2、执行命令,启动开机启动服务

systemctl enable supervisord

提示

Created symlink from /etc/systemd/system/multi-user.target.wants/supervisord.service to /usr/lib/systemd/system/supervisord.service.

3、验证是否为开机启动

systemctl is-enabled supervisord

提示enabled表示成功

4、命令汇总

4.1 启动Supervisor

supervisord -c /etc/supervisor/supervisord.conf

4.2 停止Supervisor

supervisorctl shutdown

4.3 查看所有任务状态

supervisorctl status

4.4 关闭所有任务

supervisorctl shutdown

4.5启动或停止服务

supervisorctl stop|start program_name

五、附件


版权声明:本文为weixin_32258691原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。