Linux下实现启动多版本Java服务

文章介绍了如何在Linux系统中通过编写shell脚本,避免切换环境变量来运行不同版本的Java,如Java11和Java8。通过创建软链接或自定义脚本,可以直接调用特定版本的Java运行jar包,并且可以使用nohup在后台不挂断运行。这种方法同样适用于其他命令,如javac和jstack,提高了管理多版本软件的效率。
摘要由CSDN通过智能技术生成

1.前言

当一个服务器因为各种原因需要安装多版本的 Java 的时候,切换不同环境运行 Java 费时费力,如果直接跟对应版本 Java 的全路径又麻烦。此处使用简便的方法,不切换环境变量即可做到如下的操作。

# 使用 Java 11 来运行 Jar 包
java11 -jar test-11.jar

# 使用 Java 8 来运行 Jar 包
java8 -jar test-8.jar

# 使用 nohup 不挂断来后台运行 Jar 包
nohup java11 -jar test-11.jar &

# 全路径运行
/usr/lib/jvm/java-11-openjdk-11.0.19.0.7-1.el7_9.x86_64/bin/java -jar test-11.jar

2.原理

使用 Linux 下 shell 脚本来运行 Java,如下:

test.sh 文件
/usr/lib/jvm/java-11-openjdk-11.0.19.0.7-1.el7_9.x86_64/bin/java -jar test-11.jar

上述 shell 脚本运行之后,即可在 Java 11 环境下运行 test-11.jar 文件。同理,利用好 shell 脚本就能实现 Java 版本自由。

3.做法

在可以引用到全局的路径下,如 /usr/bin 目录下新建 java11 文件,写入如下语句:

#[你的 Java bin 路径] ${@:1}
# 我本地的如下
/usr/lib/jvm/java-11-openjdk-11.0.19.0.7-1.el7_9.x86_64/bin/java ${@:1}

然后赋予运行的权限,如使用 chmod 777 java17 来确保这个文件有全局运行的权限。

4.脚本说明
前一部分,也就是 /usr/lib/jvm/java-11-openjdk-11.0.19.0.7-1.el7_9.x86_64/bin/java 这块语句,就是本机要使用的 Java 的 bin 目录的路径;后一部分 ${@:1} 则是命令行参数,从索引 index = 1 to end 的所有参数。

如果命令如下:java11 -jar test-11.jar --spring.profiles.active=dev,那么 ${@:1} 代表的就是 -jar test-11.jar --spring.profiles.active=dev 的内容。也就是在 dev 环境下运行了对应的 Jar 包。

5.其他
按照上述配置后,运行如下代码可以出现如下不同的 version,更加说明了脚本的可用性。

java11 --version

openjdk version "11.0.19" 2023-04-18 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.19.0.7-1.el7_9) (build 11.0.19+7-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.19.0.7-1.el7_9) (build 11.0.19+7-LTS, mixed mode, sharing)

java8 -version

java version "1.8.0_321"
Java(TM) SE Runtime Environment (build 1.8.0_321-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.321-b07, mixed mode)

6.其他注意事项
当使用如上方法并使用 nohup 不挂断运行之后,查看运行的进程后,可以看到两个进程,一个是 shell 进程,一个是 Java 进程。如果只 kill shell 进程之后,Java 仍会继续运行。如果只 kill Java 进程,那么两个都会结束。所以 kill 的时候注意进程区分。

7.总结
上述利用 shell 来执行不同版本的 Java,同样可以转移到其他不同版本的软件中,或者给其他 Java 命令配置不同的环境,比如 javac、jstack 等。

这样子做了之后,就能更加快捷地使用不同环境的软件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值