tomcat配置使用apr模式(linux和tomcat配置)

发布时间 2023-06-30 09:14:12作者: 王权-18K

前言

 

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步:

  1. 安装 apr
  2. 安装 apr-util (依赖 expat)
  3. 安装 tomcat-native
  4. 配置 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
安装 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

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,下载地址:
下载完成后,复制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