概要
环境搭建
1.apr安装
解压apr包,默认安装目录在 /usr/local/apr 可以通过—prefix=xxx修改
cd apr && sudo ./configure && sudo make && sudo make install
2.openssl安装
Mac系统
brew install openssl
linux系统
In debian based Linux those dependencies could be installed by something like:
apt-get install libapr1.0-dev libssl-dev
In rpm based Linux those dependencies could be installed by something like:
yum install apr-devel openssl-devel
3.tomcat-native安装
下载tomcat-native 然后解压。
cd /tomcat-native/native/ -\&& sudo ./configure --with-apr=/usr/local/apr --with-ssl=/usr/local/opt/openssl -\--with-java-home=此处换成你本地的jdk地址指定到jdk目录#/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home -\&& sudo make && sudo make install
编译成功后,会在/usr/local/apr/lib下有libtcnative-1.0.dylib的库文件,这个就是tomcat启动的依赖库
需要把该文件拷贝到jdk的Extensions目录下就行
sudo cp /usr/local/apr/lib/libtcnative-1.dylib /Library/Java/Extensions/
开启apr模式
spring boot中开启apr模式
@Beanpublic TomcatServletWebServerFactory tomcatServletWebServerFactory(){TomcatServletWebServerFactory serverFactory = new TomcatServletWebServerFactory();//设置协议为http1.1serverFactory.setProtocol(Constants.HTTP_11);Collection<LifecycleListener> listeners = serverFactory.getContextLifecycleListeners();listeners.forEach(lifecycleListener -> {if (lifecycleListener instanceof AprLifecycleListener) {AprLifecycleListener aprLifecycleListener = (AprLifecycleListener) lifecycleListener;//使用apraprLifecycleListener.setUseAprConnector(true);}});return serverFactory;}
tomcat
- 修改protocol值
Tomcat默认是HTTP/1.1,如果运行apr模式需要把protocol值修改成apr模式:org.apache.coyote.http11.Http11AprProtocol
# vi server.xml<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
- 修改SSLEngine
# vi server.xml<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off" />
启动

如上图表示启动成功
压测

总结
- AprEndpoint:用C实现,通过JNI调用的。主要提升对静态资源(如HTML、图片、CSS、JS等)的访问性能。
- AprEndpoint和NioEndpoint在性能上基本接近
结论:前后端分离的项目推荐使用Nio方式,不分离项目可以尝试开启apr模式
apr模式需要环境支持
