在Linux中常用的启动Java服务方式有两种。一种是放在容器里面的war包,一种是jar包形式的服务。接下来,分别演示这两种服务的启动方式。
(1)以tomcat容器为例,在Linux环境下将war包放到tomcat容器后,启动tomcat,运行服务。常用的命令如下:
1)进入tomcat的bin目录
$cd/usr/local/tomcat8.524/bin
2)执行tomcat启动命令
$./catalina.sh start
3)关闭tomcat服务
$./catalina.sh stop
4)重启tomcat服务
$./catalina.sh restart
5)查看服务启动日志
$cd/usr/local/tomcat8.524/logs
$tail-f catalina.out
6)查看tomcat服务是否存活
$ps-ef l grep tomcat
(2)在Linux服务器上以后台服务的方式启动jar程序:
1)nohup命令
在讲解如何后台启动Java程序之前,先讲解一下nohup命令。
nohup是不挂断的运行命令,即如果你正在运行一个进程,而且要在退出账户时该进程不结束,那么可以使用nohup命令。该命令可以在退出账户或者关闭终端之后继续运行相应的进程。nohup可以理解为不挂起的意思(no hang up)。此命令的语法为:
nohup Command[Arg...][&]
nohup命令可以和数据流进行交互。Linux操作系统中有三个常用的数据流,见表4-9。
表4-9 数据流
在nohup命令中,当使用“>console.txt”参数时,实际是“1>console.txt”的省略用法,即标准输出重定向到console.txt文件中;而“<console.txt”参数实际是“0<console.txt”的省略用法,是将console.txt输入到标准输入流中。
2)启动Java服务
启动一个jar包服务,要先定位到jar包所在的目录下面,然后执行下面的命令: $nohup java-jar xx.jar>/dev/null&
注意/dev/null代表空设备文件。该命令表示上面的启动Java服务的输出是不需要的,直接导向空的设备。
jps命令可以查看有权限访问的Java虚拟机进程。使用此命令可以查看运行的Java程序。
$jps
可以使用不同的命令参数,对启动的Java程序进行配置。
$nohup java-jar-Xmx512M-Xms128M test.jar>nohup.out 2>&1&
以上命令指定Java程序启动时内存为128MB,最大内存为512MB。同时输出内容不打印到屏幕上,而是输出到nohup.out文件中。2>&1是将标准错误流重定向到标准输出,这里的标准输出已经指定为nohup.out文件,所以标准错误流也输出到nohup.out文件中。最后一个&,是让该命令在后台执行。
Java程序启动时堆内存参数见表4-10。
表4-10 Java程序启动时堆内存参数
(www.xing528.com)
[1]Eclipse不仅仅具备IDE能力,但是对于新手来说可以简单地把它理解为IDE。
[2]算式中出现的数据个数,二元表示操作符处理两个操作数的关系。自增和自减为一元。
[3]此种方法虽然书写简单,但是新手没搞清楚之前不建议使用。
[4]本节对操作符优先级的使用不过多介绍,新手如果还不理解优先级的情况请一律使用括号进行明确的操作区域分隔。
[5]无穷循环:for(;;)和while(true)这两种写法。
[6]除非任何方式都不能实现目标逻辑,否则都不要写3层及以上的嵌套。
[7]可以叫作创建一个类的实例,或者创建一个类的对象。
[8]public等关键字可以修饰方法的可见范围,static可以设置方法为静态。
[9]List类是一种容器类,用于存放列表。
[10]方法返回值不同不能形成重载。
[11]设计模式中的单例模式就是通过静态实现的。
[12]toString的默认输出这里不再介绍,请查阅相关资料。
[13]内部类是指在一个类中、方法中或者表达式中等非文件最外层范围定义的类,普通内部类由于定义在其他类的内部作用域中,所以其含有一些特性,例如可以访问外层类的字段等,大部分内部类是为了简化代码实现等目的才使用的;静态内部类比较特殊,它的能力没有被外部类所限制,类似于外部类的能力。内部类的内容也比较多,建议读者自行了解。
[14]父类定义的方法仅仅定义了一类事物的通性,但子类的特性没有很好地表现,这种情况下子类一般重写这个方法以突显子类的特性,此方法会覆盖父类的方法。
[15]接口类不可以实例化,并且它不会影响Java的单根继承结构。
[16]如果追求极限速度,数组确实效率更高,如果只是一般的应用,其实效率的体现并没有特别重要的意义。
[17]如果必须保证存储的顺序,则有额外的开销,例如使用LinkedHashSet,它用一个链表来维护顺序。
[18]在方法内部类型被擦除了,所以无法知道T到底是什么类型。
[19]Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
[20]微服务化其实主要是把一个单一的服务,通过能力的区别进行拆分,从而形成一个个模块更小、能力更集中的服务,服务之间通过网络进行通信,后续章节会有详细介绍。
[21]TCP是网络七层协议中的面向连接的、可靠的、基于字节流的传输层通信协议。
[22]进程是程序运行的实体,计算机系统进行资源分配和调度的基本单位。
[23]当一个程序中所有线程都为后台线程,那么程序会退出。
[24]后续讲到Spring时相信大家会有更深的理解。
[25]反射调用不同的获取方法可以获取不同可见类型的字段、方法、构造器。
[26]libs文件夹,此文件夹通常用来存放第三方依赖。如果当前项目没有libs文件夹,新建一个名为libs的目录即可。
[27]Archetype是Maven提供的快速构建项目骨架的工具。
[28]resources目录添加方法:执行“鼠标右键单击项目->new->source folder->Folder name”,填写/src/main/resources,点击确定,就生成了该目录。
[29]TDD是测试驱动开发(Test-Driven Development)的英文简称,是敏捷开发中的一项核心实践和技术,也是一种设计方法论。
[30]TortoiseSVN是一个免费的Svn客户端,并且很好地结合了Windows系统,可视化界面使它直观且易于使用。
[31]msi文件是Windows Installer的数据包,它实际上是一个数据库,包含安装一种产品所需要的信息和在很多安装情形下安装(和卸载)程序所需的指令和数据。
[32]此处及后面使用的IP地址、域名等,均为本书编写时临时使用的测试环境地址,不对读者提供接口或访问能力。
[33]Gitee:码云(gitee.com)是开源中国社区团队推出的基于Git的快速的、免费的、稳定的在线代码托管平台。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。