Spring Boot切换为APR模式
Spring Boot切换为APR模式
在Springboot中内嵌的Tomcat默认启动开启的是NIO模式,这里如果我们要在linux内核的系统上使用APR模式,那么需要安装一些lib库,可以通过rpm -q | grep apr来查看是否安装了apr,如果安装了则不再需要安装,如果未安装则需要安装下列库:
1)openssl,需要版本大于1.0.2,如果不使用https openssl也可以不安装,就是在启动的时候会报openssl的错误,直接忽视就可以了
2)apr,可以去官网下载1.6.X最新版进行下载http://apr.apache.org/download.cgiapr-util,在同一个页面进行下载,最新版本为1.6.X版本tomcat-native,在tomcat中自带了安装包,可以在tomcat的bin目录下找到tomcat-native.tar
APR包
链接:https://pan.baidu.com/s/1nvC9UYy2rzhtArQOkNEF4w
提取码:xjmj
下载最新&解压安装包apr
wget http://mirrors.hust.edu.cn/apache//apr/apr-1.7.0.tar.gz
wget http://mirrors.hust.edu.cn/apache//apr/apr-util-1.6.1.tar.gz
tar xf apr-1.7.0.tar.gztar
tar xf apr-util-1.6.1.tar.gz
安装APR
cd apr-1.7.0
检查是否符合安装条件并配置安装参数,检查是否缺失类库,一般来说如果安装的不是精简版系统都是能顺利通过的#./configure --prefix=/usr/local/apr && make && make install
如果不设置安装路径,那么系统默认的安装路径为/usr/local/apr/lib
安装apr-util
cd apr-util-1.6.1
./configure --with-apr=/usr/local/apr --prefix=/usr/local/apr-utils --with-java-home=/usr/local/jdk && make && make install
安装apr-util需要配置apr路径和jvm路径,否则会报错找不到apr
安装tomcat-native
http://archive.apache.org/dist/tomcat/tomcat-connectors/native/1.2.14/source/
tomcat-native下载地址,低版本启动会报错tar xf tomcat-native-1.2.14.tar.gz
cd tomcat-native-1.2.14-src/native/
./configure --with-apr=/usr/local/apr/bin/apr-1-config --with-java-home=/usr/local/jdk && make && make install
配置Apr
vim /etc/profile
source /etc/profile
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
export LD_RUN_PATH=$LD_RUN_PATH:/usr/local/apr/lib
新增APRConfig类
packagecom.ochain.data2chain.gateway.config;
importorg.apache.catalina.LifecycleListener;
importorg.apache.catalina.core.AprLifecycleListener;
importorg.springframework.beans.factory.annotation.Value;
importorg.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
importorg.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
importorg.springframework.context.annotation.Bean;
importorg.springframework.context.annotation.Configuration;
/**
*
* @authoryueli
* @date: 2020年7月10日下午3:32:08
*/@ConfigurationpublicclassAPRConfig{
@Value("${tomcat.apr:false}")privateboolean enabled;
@BeanpublicEmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory container = new TomcatEmbeddedServletContainerFactory();
if(enabled) {
LifecycleListener arpLifecycle = new AprLifecycleListener();
container.setProtocol("org.apache.coyote.http11.Http11AprProtocol");
container.addContextLifecycleListeners(arpLifecycle);
}
returncontainer;
}
}
启动springboot
启动成功后回发现日志输出如下的信息
2020-07-1015:35:19,032-InitializingProtocolHandler["http-apr-8081"]
2020-07-1015:35:19,051-StartingProtocolHandler["http-apr-8081"]
2020-07-1015:35:19,080-Tomcatstartedonport(s): 8081(http)
启动及安装报错
安装提示No such file or directory
yum install -y expat-devel*
安装后确实可以正常make这里要注意,如果只yum search expat只会找到expat包,要yum search expat*才会看到还有expat-devel的包
系统找不到apr的lib库
org.springframework.boot.context.embedded.tomcat.ConnectorStartFailedException: Connector configured tolisten onport 8081 failed tostart
...
***************************
APPLICATION FAILED TOSTART
***************************
Description:
The Tomcat connector configured tolisten onport 8081 failed tostart. Theport may already be inuse orthe connector may be misconfigured.
Caused by: org.apache.catalina.LifecycleException: The configured protocol [org.apache.coyote.http11.Http11AprProtocol] requires the APR/native library which is notavailable
在启动命令添加制定par库
java -Djava.library.path=/usr/apr/lib -jar xxxx-0.0.1-SNAPSHOT.jar
apr-util致命错误:expat.h:没有那个文件或目录
xml/apr_xml.c:35:19: 致命错误:expat.h:
没有那个文件或目录#include<expat.h>^
编译中断。make[1]: *** [xml/apr_xml.lo] 错误1make[1]:
离开目录“/home/apr/apr-util-1.6.1”缺少expat库
安装 expat-devel 库
yum install -y expat-devel
安装后再次编辑
内网的安装方式(上方APR包里有)
https://launchpad.net/ubuntu/+source/expat/2.0.1-7.2ubuntu1.4
./configure
make && make install
然后回到apr-util-1.6.1目录重新make即可
容器内无法编译(缺少GCC)
apk update
apk add build-base