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
wgethttp://mirrors.hust.edu.cn/apache//apr/apr-1.7.0.tar.gz
wgethttp://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-06-1015:31:19,032-InitializingProtocolHandler["http-apr-8081"]
2020-06-1015:31:19,051-StartingProtocolHandler["http-apr-8081"]
2020-06-1015:31: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
安裝後再次編輯