Tomcat之多JAVA环境JVM版本查看及使用优先级

news2024/11/26 0:51:30

一、前言

  业务系统包含PC端和移动端,移动端为微信小程序。在小程序客户端发送消息未得到回应,查询系统后台日志发现报错日志。JDK或者JRE中自带的“local_policy.jar ”和“US_export_policy.jar”是支持128位密钥的加密算法,而当我们要使用256位密钥算法的时候,已经超出它的范围,无法支持,所以才会报:“java.security.InvalidKeyException: Illegal key size or default parameters”的异常。根据百度查询处理博主替换了jdk中相关的两个jar包,重启系统,发现还是报这个错误。博主进一步排查发现原来博主部署方式是tomcat多实例部署,替换的也是该实例下的jar包,但是在操作系统层面也安装了jdk8版本,并且配置了jre环境变量,而tomcat运行时优先使用jre环境变量中的java版本,找不到JRE_HOME环境变量的情况下使用JAVA_HOME环境变量中的java版本。这就是这篇博文的由来因果。

二、解决微信小程序加解密报错

1、微信小程序后端报错

报错信息:Forwarding to error page from request [/wx/*******/callback/] due to exception [java.security.InvalidKeyException: Illegal key size]
在这里插入图片描述

2、检查JAVA环境变量

$ echo $JRE_HOME
$ echo $JAVA_HOME
在这里插入图片描述

3、检查java版本

$ java -version

4、下载支持256位加解密算法的环境变量

  可以从官网或者CSDN下载支持256位加解密算法的两个jar包(local_policy.jar和US_export_policy.jar),CSDN下载链接:java支持256位加密算法所需jar包。

5、将下载jar包替换现有jar包

  将下载的jar包上传到服务器上,根据第二步查看的java环境变量情况,确定需要替换的目录,如果有JRE_HOME环境变量则优先替换JRE_HOME环境变量路径下的jar包,如果没有则替换JAVA_HOME环境变量路径下的jar包。

在这里插入图片描述

6、重启应用

  替换后重启系统服务,再次发起消息,查看系统后台日志不再报错,客户端也可以正常收到消息回复啦!

$ ./bin/shutdown.sh
$ ./bin/startup.sh

三、tomcat运行依赖java环境变量优先级实验

  博主实际运行环境比较特殊,为了验证tomcat对应java环境的使用优先级顺序,博主准备了两个java版本,并配置启用了manager服务。通过manager服务可以查看tomcat实例依赖的JVM环境java版本。

1、上传两个java版本到服务器

[root@s142 local]# ll |grep -E “java|jdk”
lrwxrwxrwx. 1 root root 12 Apr 6 15:34 java -> jdk1.8.0_291
lrwxrwxrwx. 1 root root 12 Apr 6 15:34 java241 -> jdk1.8.0_241
drwxr-xr-x. 7 root root 245 Dec 11 2019 jdk1.8.0_241
drwxr-xr-x. 8 root root 273 Apr 8 2021 jdk1.8.0_291
-rw-r–r–. 1 root root 194545143 Mar 13 2020 jdk-8u241-linux-x64.tar.gz
-rw-r–r–. 1 root root 144935989 Jun 16 2021 jdk-8u291-linux-x64.tar.gz

2、配置java环境变量

  操作系统安装两个java版本,一个用于指定JAVA_HOME环境变量,一个用于配置JRE_HOME环境变量配置。我们在操作系统查看现在的java版本都是JAVA_HOME环境变量配置的版本。

[root@s142 local]# cat /etc/profile

#java env test
export JAVA_HOME=/usr/local/java
export JRE_HOME=/usr/local/java241/jre
export PATH=${JAVA_HOME}/bin:$PATH

(base) [wuhs@s142 tomcat8]$ java -version
java version “1.8.0_291”
Java™ SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot™ 64-Bit Server VM (build 25.291-b10, mixed mode)

3、部署一个tomcat实例

  部署一个tomcat实例,如何部署manager见博文Tomcat之服务管理页面manager部署。

4、启动服务

(base) [wuhs@s142 tomcat8]$ java -version
java version “1.8.0_291”
Java™ SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot™ 64-Bit Server VM (build 25.291-b10, mixed mode)
(base) [wuhs@s142 tomcat8]$ ./bin/startup.sh

5、查看JVM版本

  启动tomcat实例,我们可以看到tomcat实例运行在JRE_HOME环境变量的java版本上。
在这里插入图片描述

6、修改环境变量

  我们修改环境变量配置,取消JRE_HOME环境变量配置。
[root@s142 local]# cat /etc/profile

#java env test
export JAVA_HOME=/usr/local/java
#export JRE_HOME=/usr/local/java241/jre
export PATH=${JAVA_HOME}/bin:$PATH
[root@s142 local]# java -version
java version “1.8.0_291”
Java™ SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot™ 64-Bit Server VM (build 25.291-b10, mixed mode)

7、重启服务

(base) [wuhs@s142 tomcat8]$ ./bin/shutdown.sh
(base) [wuhs@s142 tomcat8]$ ./bin/startup.sh

8、再次查看JVM版本

  此时可以看到JVM版本是JAVA_HOME配置指定的版本。
在这里插入图片描述

9、启动日志查看

  实际上,在单实例运行中,我们可以看到启动日志已经将环境变量设置显示了出来,不管如何配置tomcat内部使用的都是JRE_HOME这个配置,只是在找不到操作系统JRE_HOME配置的时候,JRE_HOME配置就会取JAVA_HOME的值赋值给JRE_HOME。

(base) [wuhs@s142 tomcat8]$ ./bin/startup.sh
Using CATALINA_BASE: /home/wuhs/tomcat8
Using CATALINA_HOME: /home/wuhs/tomcat8
Using CATALINA_TMPDIR: /home/wuhs/tomcat8/temp
Using JRE_HOME: /usr/local/java
Using CLASSPATH: /home/wuhs/tomcat8/bin/bootstrap.jar:/home/wuhs/tomcat8/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.

10、总结

  实际上Tomcat实例运行时依赖的java环境是取值于JRE_HOME,如果找不到则使用JAVA_HOME赋值给JRE_HOME。如果是多实例环境运行,为了减少系统可能的多java版本带来的影响,建议使用JRE_HOME定义java环境。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/587561.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux开发工具vim篇

文章目录 👇0. 前言👉1.yum软件包管理器👏1.1 yum三板斧👌查看👌安装👌卸载 👏1.2 拓展yum源 👍2. vim编辑器🤏2.1 vim基本概念🤏2.2 vim基本操作&#x1f90…

电路仿真软件LTspice 使用教程

一、LTspice 特点 1、免费 2、电源快速仿真 3、涵盖大量ADI产品模型 二、获取方式 LTspice信息中心 | 亚德诺半导体 如下图所示,根据操作系统,下载对应的安装包安装即可。 软件打开界面如图: 三、运行演示电路 一、官网下载 LTspice演…

一文读懂kubernetes部署:网关部署

部署网关 如您需要创建SSL(HTTPS)站点请先参考SSL证书的创建创建好secret 修改Ingress配置域名 首先我们要先根据域名情况更改ingress配置情况: 非SSL站点 vi/opt/kubernetes/gateway/ingress.yaml SSL站点 创建secret kubectl-nns-javashopcreatesecrettlsxxx-se…

Caffeine本地缓存

1、Caffine简介 简单说,Caffine 是一款高性能的本地缓存组件 由下面三幅图可见:不管在并发读、并发写还是并发读写的场景下,Caffeine 的性能都大幅领先于其他本地开源缓存组件 2、常见的缓存淘汰算法 2.1、FIFO 它是优先淘汰掉最先缓存的数据…

SQL优化的方法

(1)建立物化视图或尽可能减少多表查询。 (2)以不相干子查询替代相干子查询。 (3)只检索需要的列。 (4)用带in的条件子句等价替换or子句。 (5)经常提交com…

如何科学地利用MTTR优化软件交付流程?

谷歌提出的衡量 DevOps 质量的 DORA 指标让 MTTR(平均恢复时间) 名声大振。在本文中,你将了解到 MTTR 的作用、为什么它对行业研究很有用、你可能被它误导的原因以及如何避免 MTTR 产生的弊端。 MTTR 究竟是在测量什么? MTTR …

【服务器】springboot服务端接口公网远程调试 - 实现HTTP服务监听

文章目录 前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统 2.2 创建隧道映射本地端口2.3 测试公网地址 3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址…

chatgpt赋能python:Python中如何删除:最全面的教程

Python中如何删除:最全面的教程 在Python编程中,许多情况下需要对数据进行操作,其中一种最基本的操作之一是删除。本文章将是一个关于Python中如何删除的最全面的教程。我们将会介绍Python中删除的概念、各种删除方法、删除前后的注意事项以…

同元自主可控半实物仿真从方案到实践

千寻万觅待花开 在日益激烈的市场竞争环境下,新产品的开发和面世遇到更高的要求和挑战,市场对其可靠性和稳定性的要求也日益提高。完全基于软件仿真的开发过程只实现了系统结构及原理、算法的验证,最终样机硬件系统并未进行仿真测试或者进行仿…

一寸照片的尺寸是多少?证件照尺寸如何修改?

一寸证件照是我们日常生活中非常常用的证件照。无论是办理身份证、驾驶证、护照还是其他证件,都需要提供一寸证件照。一寸证件照是指照片尺寸为2.5cm3.5cm的照片,通常要求符合一定的标准。但是大家在需要使用一寸证件照时,发现自己的证件照尺…

基于微信小程序制作一个记账小工具

你不理财,财不理你,制作一个记账小程序对自己的收入/支出明细进行管理,守护好自己的钱袋子。 一、小程序1.1 项目创建1.2 首页1.3 收支报表页1.4 记账提交页1.5 记账列表页

Transformer升级之路:一种全局长度外推的新思路

©PaperWeekly 原创 作者 | 苏剑林 单位 | 追一科技 研究方向 | NLP、神经网络 说到 Transformer 无法处理超长序列的原因,大家的第一反应通常都是 Self Attention 的二次复杂度。但事实上,即便忽略算力限制,常规的 Transformer 也无法处…

NetApp ONTAP Select 混合云存储解决方案

NetApp ONTAP Select 集敏捷性与经验证的数据管理功能于一体。 为什么选择 ONTAP Select 来实施混合云? -强大而敏捷的存储 既具备 ONTAP 软件的强大功能,也能够灵活地部署在远程办公室/后台位置以及数据中心外部的专用边缘环境中的商用硬件上。ONTAP …

python---逻辑运算符

and 并且 一假则假 or 或者 一真则真 not 逻辑取反 下面举例介绍上面代码的运行情况 运行结果如下: EG: 针对上述情况可以简化代码成如下: 短路操作 左侧为false右侧不在求值

如何使用 Megatron-LM 训练语言模型

在 PyTorch 中训练大语言模型不仅仅是写一个训练循环这么简单。我们通常需要将模型分布在多个设备上,并使用许多优化技术以实现稳定高效的训练。Hugging Face 🤗 Accelerate 的创建是为了支持跨 GPU 和 TPU 的分布式训练,并使其能够非常容易的…

WPS 借助 ML Kit 无缝翻译 43 种语言,每年净省 6,500 万美元

△ 动画说明: 在笔记本电脑屏幕中,汉字 "文" 将变为字母 "A",代表文本的横线将逐一出现,就像有人在输入内容一样。 WPS 是一款办公套件软件,可让用户轻松查看和编辑其所有文档、演示文稿、电子表格等。作为一…

JetBrains的Go语言集成开发环境GoLand 2023版本在Win10系统的下载与安装配置教程

目录 前言一、GoLand 安装二、使用配置总结 前言 GoLand是一款专为Go语言开发人员设计的集成开发环境(IDE)。它提供了丰富的功能和工具,可以帮助开发人员更高效地编写、调试和部署Go应用程序。 GoLand的主要特点: ——代码编辑…

Learning C++ No.25【开散列封装unordered_set和unordered_map】

引言: 北京时间:2023/5/29/7:05,上星期更文一篇,且该篇博客在周三就写完了,所以充分体现,咱这个星期摆烂充分,哈哈哈!现在的内心情感没有以前那么从容了,这次摆的时间是…

MySQL高级篇复盘笔记(二)【日志、主从复制、分库分表、读写分离】

❤ 作者主页:欢迎来到我的技术博客😎 ❀ 个人介绍:大家好,本人热衷于Java后端开发,欢迎来交流学习哦!( ̄▽ ̄)~* 🍊 如果文章对您有帮助,记得关注、点赞、收藏、…

【Redis25】Redis进阶:分布式锁实现

Redis进阶:分布式锁实现 锁这个概念,不知道大家掌握的怎么样。我是先通过 Java ,知道在编程语言中是如何使用锁的。一般 Java 的例子会是操作一个相同的文件,但其实我们知道,不管是文件,还是数据库中的一条…