前言
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
命令代码
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
命令代码
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
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包
链接:https://pan.baidu.com/s/1lYF2KPpzB-hh_Bx8pJaItw
提取码:1234