1. 程式人生 > 實用技巧 >Spring Boot切換為APR模式

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

  1. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
  2. export LD_RUN_PATH=$LD_RUN_PATH:/usr/local/apr/lib

新增APRConfig類

  1. packagecom.ochain.data2chain.gateway.config;
  2. importorg.apache.catalina.LifecycleListener;
  3. importorg.apache.catalina.core.AprLifecycleListener;
  4. importorg.springframework.beans.factory.annotation.Value;
  5. importorg.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
  6. importorg.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
  7. importorg.springframework.context.annotation.Bean;
  8. importorg.springframework.context.annotation.Configuration;
  9. /**
  10. *
  11. * @authoryueli
  12. * @date: 2020年7月10日下午3:32:08
  13. */@ConfigurationpublicclassAPRConfig{
  14. @Value("${tomcat.apr:false}")privateboolean enabled;
  15. @BeanpublicEmbeddedServletContainerFactory servletContainer() {
  16. TomcatEmbeddedServletContainerFactory container = new TomcatEmbeddedServletContainerFactory();
  17. if(enabled) {
  18. LifecycleListener arpLifecycle = new AprLifecycleListener();
  19. container.setProtocol("org.apache.coyote.http11.Http11AprProtocol");
  20. container.addContextLifecycleListeners(arpLifecycle);
  21. }
  22. returncontainer;
  23. }
  24. }

啟動springboot

啟動成功後回發現日誌輸出如下的資訊

  1. 2020-06-1015:31:19,032-InitializingProtocolHandler["http-apr-8081"]
  2. 2020-06-1015:31:19,051-StartingProtocolHandler["http-apr-8081"]
  3. 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庫

  1. org.springframework.boot.context.embedded.tomcat.ConnectorStartFailedException: Connector configured tolisten onport 8081 failed tostart
  2. ...
  3. ***************************
  4. APPLICATION FAILED TOSTART
  5. ***************************
  6. Description:
  7. The Tomcat connector configured tolisten onport 8081 failed tostart. Theport may already be inuse orthe connector may be misconfigured.
  8. 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:沒有那個檔案或目錄

  1. xml/apr_xml.c:35:19: 致命錯誤:expat.h
  2. 沒有那個檔案或目錄#include<expat.h>^
  3. 編譯中斷。make[1]: *** [xml/apr_xml.lo] 錯誤1make[1]:
  4. 離開目錄“/home/apr/apr-util-1.6.1”缺少expat

安裝 expat-devel 庫

yum install -y expat-devel
安裝後再次編輯