You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

openSUSE Leap 42.3上Spring Boot内嵌Tomcat启动APR库版本不兼容问题求解

解决openSUSE Leap 42.3上Spring Boot 2.0.0.M6内嵌Tomcat的APR版本不兼容问题

嘿,我来帮你搞定这个报错!先给你理清楚问题根源,再给你两个靠谱的修复方案。

为啥会出这个错?

你看到的这个incompatible version [1.1.34] of the APR based Apache Tomcat Native library错误,核心是系统里装的APR(Apache Portable Runtime)原生库版本太老了。Spring Boot 2.0.0.M6内嵌的是Tomcat 8.5.x系列,这个版本的Tomcat要求APR原生库至少得是1.2.10版本,而你的openSUSE Leap 42.3自带的1.1.34版本根本达不到要求,所以启动时就炸了。

两种修复方案任你选

方案一:升级系统的APR库

这是最彻底的解决办法,直接把老版本的APR换成兼容的版本。用openSUSE的zypper包管理器就能搞定:

  1. 先刷新一下包源,确保能拿到最新的包信息:
sudo zypper refresh
  1. 安装最新的APR相关包(包括开发包和Tomcat原生库):
sudo zypper install libapr1 libapr1-devel tomcat-native

装完之后重启你的Spring Boot应用,再看日志,这个兼容性错误应该就消失了。如果想确认APR是否正常加载,日志里会出现类似Loaded APR based Apache Tomcat Native library [xxx] using APR version [xxx]的提示。

方案二:禁用APR,改用Tomcat默认的NIO模式

要是升级APR遇到麻烦(比如官方源里没有更高版本的包),那咱就绕开APR,直接让Tomcat用默认的NIO模式,操作也很简单,有两种方式:

方式1:启动时加JVM参数

在启动应用的命令里加上这个参数,强制指定用NIO协议:

-Dserver.tomcat.protocol=NIO

比如你的启动命令可能是这样的:

java -Dserver.tomcat.protocol=NIO -jar your-spring-boot-app.jar

方式2:在配置文件里设置

打开你的application.properties或者application.yml,加一行配置就行:

  • 如果你用的是properties格式:
server.tomcat.protocol=NIO
  • 如果你用的是yml格式:
server:
  tomcat:
    protocol: NIO

这样配置后,Tomcat启动时就会跳过APR库的加载,直接用NIO模式,自然就不会有版本不兼容的问题了。

验证修复效果

重启应用后,检查日志,如果那个APR版本不兼容的错误没再出现,就说明修复成功啦!

内容的提问来源于stack exchange,提问作者alexanoid

火山引擎 最新活动