openSUSE Leap 42.3上Spring Boot内嵌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包管理器就能搞定:
- 先刷新一下包源,确保能拿到最新的包信息:
sudo zypper refresh
- 安装最新的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




