前言
springboot 默认使用嵌入式 tomcat 做容器
tomcat支持三种运行模式
BIO 阻塞式(tomcat7以下默认)
NIO 非阻塞式(tomcat8及以上默认, springboot默认)
APR(Apache Portable Runtime)
APR模式调用操作系统能力处理IO, 也是异步的, 有最好的性能, 但是配置复杂.
环境准备
springboot: 2.3.2.RELEASE (依赖的tomcat版本: 9.0.37)
apr: 1.7.0
apr-util: 1.6.3
tomcat-native: 1.2.37
expat: 2.5.0
三种模式
BIO: Starting ProtocolHandler ["http-bio-8080"]
NIO: Starting ProtocolHandler ["http-nio-8080"]
APR: Starting ProtocolHandler ["http-apr-8080"]
springboot 配置apr模式
需要4步:
安装 apr
安装 apr-util (依赖 expat)
安装 tomcat-native
配置 springboot 应用
1. 安装 apr
下载: https://archive.apache.org/dist/apr/
apr-1.7.0.tar.gz
命令代码
cd apr-1.7.0/
./configure --prefix=/usr/local/apr
make
sudo make install
安装成功:
2. 安装 apr-util
安装 expat下载: https://jaist.dl.sourceforge.net/project/expat/expat/2.5.0/expat-2.5.0.tar.gz
命令代码
cd expat-2.5.0
./configure --prefix=/usr/local/expat
make
sudo make install
安装成功
如果希望别的应用也可以使用 expat, 可以考虑把它写入链接库路径
sudo vim /etc/ld.so.conf.d/expat.conf
输入 : /usr/local/expat/lib
配置生效
sudo ldconfig
# 头文件
# sudo ln -s /usr/local/expat/include /usr/include/expat
安装 apr-util下载: https://archive.apache.org/dist/apr/apr-util-1.6.3.tar.gz
命令代码
cd apr-util-1.6.3/
./configure --with-apr=/usr/local/apr --with-expat=/usr/local/expat --prefix=/usr/local/apr-utils
make
sudo make install
成功:
3. 安装 tomcat-native
下载: https://tomcat.apache.org/download-native.cgi
tomcat-native-1.2.37-src.tar.gz
https://dlcdn.apache.org/tomcat/tomcat-connectors/native/1.2.37/source/tomcat-native-1.2.37-src.tar.gz
doc:
https://tomcat.apache.org/native-doc/
https://tomcat.apache.org/native-1.2-doc/
命令代码
cd tomcat-native-1.2.37-src/native
./configure --with-apr=/usr/local/apr --with-java-home=/usr/lib/jvm/java-1.8.0-openjdk
make
sudo make install
其中/usr/lib/jvm/java-1.8.0-openjdk是 jdk安装路径
成功:
配置生效
sudo vim /etc/ld.so.conf.d/apr.conf
输入:/usr/local/apr/lib
sudo ldconfig
4. 在 Springboot 应用中配置 apr
创建 config 类
import org.apache.catalina.core.AprLifecycleListener;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AprConfiguration {
@Bean
public ConfigurableServletWebServerFactory webServerFactory() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
// 开启 apr 模式
factory.setProtocol("org.apache.coyote.http11.Http11AprProtocol");
// 不启用 SSL (我的springboot跑在nginx反向代理之后,之间的调用是http的,不需要SSL)
AprLifecycleListener listener = new AprLifecycleListener();
String valueOff = "off";
listener.setFIPSMode(valueOff);
listener.setSSLEngine(valueOff);
listener.setUseOpenSSL(false);
factory.addContextLifecycleListeners(listener);
return factory;
}
}
启动应用需要添加 jvm 参数, 注意本地 IDE 里启动也需要添加
-Djava.library.path=/usr/local/apr/lib
运行 springboot jar 需要添加 jvm 参数
java -Djava.library.path=/usr/local/apr/lib -jar ./*****.jar
成功案例:
tomcat使用apr
1、安装时配置
tomcat的安装版本,安装的时候就选择支持Native
2、修改配置文件
找到配置文件D:\apache-tomcat-9.0.76\bin\service.xml
修改protocol,将protocol由HTTP/1.1修改为org.apache.coyote.http11.Http11AprProtocol即可
单独下载安装native.dll,下载地址:http://tomcat.apache.org/download-native.cgi
下载完成后,复制32位或64位 “tcnative-1.dll”这个文件到 $tomcat$/bin 下
结果展示:
附上安装包和运行jar包
apr-1.7.0.tar.gz
apr-util-1.6.3.tar.gz
expat-2.5.0.tar.gz
tomcat-native-1.2.37-src.tar.gz
demo-0.0.1-SNAPSHOT.jar
链接:https://pan.baidu.com/s/1lYF2KPpzB-hh_Bx8pJaItw 提取码:1234