一、解决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项目使用的消息队列。