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

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 等。

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值