解决SpringBoot项目使用sapjco依赖jar包的冲突问题+解决Linux中的java库中没有sapjco的问题+记录SpringBoot和SpringMVC项目对应的消息队列不能通用的问题

一、解决SpringBoot项目使用sapjco依赖jar包的冲突问题

1.1 背景

在我之前的博文《SpringMVC + RabbitMQ实战(XML配置rabbit,监听多条队列)》提到过使用SpringMVC而不是使用SpringBoot的原因是SpringBoot与sapjco.jar的冲突问题。

It is not allowed to rename or repackage the original archive “sapjco3.jar”

1.2 解决方法

在IntelliJ IDEA中使用package工具打包SpringBoot项目为jar包
在这里插入图片描述
使用解压工具打开该jar包,进入BOOT-INF/lib文件夹,将sapjco3-3.0.12.jar手动重命名为sapjco3.jar
在这里插入图片描述
把jar包通过XShell传至Linux服务器上,使用java -jar xxx.jar命令运行,便可正常启动SpringBoot项目。
而且不会再出现下述BUG了:

It is not allowed to rename or repackage the original archive “sapjco3.jar”

但新的BUG将会出现,接着往下阅读。

二、解决Linux中的java库中没有sapjco的问题

2.1 背景

使用Postman调用访问SAP的HTTP接口时,后端返回以下错误:

java.lang.UnsatisfiedLinkError: no sapjco3 in java.library.path

错误提示当前系统的java类库路径中没有sapjco3,所以需要为系统加上sapjco3。

2.2 解决方法

2.2.1 修改环境变量

执行此步骤之前请确保当前系统已经装好JDK,并配好JDK的环境变量。
编辑环境变量

vim /etc/profile

将最后部分export(用户设置或显示环境变量)部分修改为如下所示(根据自己JDK的实际安装目录修改):

export JAVA_HOME=/usr/java/jdk1.8.0_191-amd64
export CLASSPATH=$JAVA_HOME/lib
export JRE_HOME=$JAVA_HOME/jre
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
export LD_LIBRARY_PATH=dir:$LD_LIBRARY_PATH:$JAVA_HOME/jre/lib/amd64/server

LD_LIBRARY_PATH是Linux环境变量名,该环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径。

2.2.2 上传sapjco.jar和libsapjco.so至环境变量中的配置路径

根据环境变量中的配置路径提示,将libsapjco3.so上传至$JAVA_HOME/jre/lib/amd64/server文件夹下,将sapjco3.jar上传至$JAVA_HOME/lib

注意,执行完上述两个步骤后,需要执行:

source /etc/profile

使得新的环境变量生效。

三、记录SpringBoot和SpringMVC项目对应的消息队列不能通用的问题

3.1 背景

如果Rabbit服务器上存在着由SpringBoot-@Bean注解形式(SpringMVC-XML形式)项目创建的Rabbit消息队列,那么这些消息队列就不能被SpringMVC(SpringBoot)所消费。

3.2 暂时的解决方法

目前对这个问题没有深究,暂时的解决方法是如果希望消息队列是供SpringMVC项目使用的,但却是由SpringBoot项目创建的,那么只有在RabbitMQ的后台管理页面上删除消息队列,重启Tomcat(重启SpringMVC-RabbitMQ项目)已创建供SpringMVC项目使用的消息队列。

猜你喜欢

转载自blog.csdn.net/qq_15329947/article/details/87893288
今日推荐