网上查到的一些springboot内嵌的tomcat开启apr的文章,好像使用的springboot版本较老,在SpringBoot 2.0.4.RELEASE中已经行不通了。自己整理了一下,供参考。
运行环境:Centos 7,JDK 1.8
1.pom.xml代码如下:
1<project xmlns="http://maven.apache.org/POM/4.0.0" 2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 6 <groupId>syb</groupId> 7 <artifactId>tomcat.apr.sample</artifactId> 8 <version>0.0.1-SNAPSHOT</version> 9 <packaging>jar</packaging> 10 11 <name>tomcat.apr.sample</name> 12 <url>http://maven.apache.org</url> 13 14 <properties> 15 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 16 <java.version>1.8</java.version> 17 </properties> 18 19 <parent> 20 <groupId>org.springframework.boot</groupId> 21 <artifactId>spring-boot-starter-parent</artifactId> 22 <version>2.0.4.RELEASE</version> 23 </parent> 24 25 <dependencies> 26 <dependency> 27 <groupId>org.springframework.boot</groupId> 28 <artifactId>spring-boot-starter-web</artifactId> 29 </dependency> 30 </dependencies> 31 32 <build> 33 <plugins> 34 <plugin> 35 <groupId>org.springframework.boot</groupId> 36 <artifactId>spring-boot-maven-plugin</artifactId> 37 </plugin> 38 </plugins> 39 </build> 40</project>
2. 查看内嵌的tomcat版本,如从eclipse中查看,如下图:

3. 去tomcat官网,下载该版本的tomcat,如下图:

4. 将tomcat的压缩包上传到linux系统,解压,然后进入${tomcat-home}/bin目录,如下图:

5. 将上图中红框内文件“tomcat-native.tar.gz”解压开,然后进入“${tomcat-home}/bin/tomcat-native-1.2.18-src/native”目录。
6. 按顺序执行如下命令,注意,其中java-home根据实际情况进行修改,其中prefix为tomcat apr库的安装位置,可根据自己的需要进行修改。
1yum -y install gcc 2 3yum -y install apr-devel openssl-devel 4 5./configure --with-apr=/usr/bin/apr-1-config \ 6 --with-java-home=/usr/java/jdk1.8.0_162/ \ 7 --with-ssl=yes \ 8 --prefix=/usr/local/tomcat-apr 9 10make && make install
执行完成后,结果如下图,表示tomcat apr库安装成功,库的位置为/usr/local/tomcat-apr/lib:

7. 配置环境变量,打开/etc/profile文件,在结尾处,添加如下内容:
export LD_LIBRARY_PATH=/usr/local/tomcat-apr/lib
8. 使环境变量生效,执行如下命令:
source /etc/profile
9. 程序代码如下,SpringBoot 2.0.4内嵌的tomcat,默认使用的是nio模式,若要开启apr模式,需要做一些定制操作。
1package syb.tomcat.apr.sample; 2 3import org.springframework.boot.SpringApplication; 4import org.springframework.boot.autoconfigure.SpringBootApplication; 5import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; 6import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory; 7import org.springframework.context.annotation.Bean; 8 9@SpringBootApplication 10public class App { 11 /** 12 * 开启apr模式 13 * @return 14 */ 15 @Bean 16 public ConfigurableServletWebServerFactory webServerFactory() { 17 TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory(); 18 factory.setProtocol("org.apache.coyote.http11.Http11AprProtocol"); 19 return factory; 20 } 21 22 public static void main(String[] args) { 23 SpringApplication.run(App.class, args); 24 } 25}
10. 将程序打包,放到linux机器,然后执行如下命令运行:
java -jar tomcat.apr.sample-0.0.1-SNAPSHOT.jar
结果如下图,可以从中看到,已经开启了apr模式:
