Springboot配置undertow容器

前言

学习开源项目Halo的时候,看到了undertow不知道这是什么玩意儿,自然要来查一查资料,然后就发现了,它就跟tomcat一样,也是一个web服务器。我就再查查发现,目前的web服务器还真不少,除了这两个,还有Jboss、Jetty等等很多。不过目前SpringBoot只支持三种,tomcat、Jetty、undertow。而且看了好几篇博客,作者都说undertow比其他两个强,怪不得Halo要用undertow来作为web服务器了。

undertow替换tomcat

怎么能将默认的tomcat替换掉呢?自然是谷歌一下或者百度一下。那么我们就开始照着教程做呗,第一步,创建一个Springboot项目,这一步我相信每个人都会吧。然后重点来了,在这一步我学会了maven的一个标签<exclusions>排除依赖,根据教程我们要排除tomcat的依赖就像这样:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-start-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

然后再加入undertow的依赖,就像这样

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-undertow</artifactId>
</dependency>

如此,pom文件改造完成,接下来就是yml配置文件了,如下配置,至于undertow下边的属性都是什么意思,查一查就知道了,我查过但是又忘了......

server:
  port: 8080
  undertow:
    io-threads: 2 
    worker-threads: 20
    buffer-size: 1024
    direct-buffers: true

然后就完事了,有个教程告诉我就配置到这里就完事了,启动就行了,我自然是跟着大佬的脚步,说启动就启动,但是结果不尽如人意,事情总是不会向你想的那个方向前进。

瞅瞅,瞅瞅,我不是排除了tomcat依赖了吗?为什么还是以tomcat启动了?这里不知道是不是版本的问题!我也没有试验,但是既然出问题了,那我们就着手解决,怎么解决呢?当然是百度或者谷歌了!!

经过我的多方查阅资料所得,我只能浅显的说一说我的收获,对不对呢咱也不知道,先这么理解着。我们虽然引入了依赖,但是spring启动之后并没有将它实例化,也没有被springIOC管理。我们知道springIOC是一个大容器,管理着所有的对象,以前不用springboot的时候我们是怎么将对象归于IOC管理呢?我们都是在类上加注解啊,或者在application.xml中配置bean标签啊等等,这样将对象交给IOC,那么Springboot怎么配置呢?

这个时候就不得不说一说springboot推荐使用Java类配置,这就涉及到一个注解@Configuration,一看这个单词就知道是配置的意思。就像这样:

@Configuration
public class SpringBootConfig {

    @Bean
    public ServletWebServerFactory servletContainer(){
        UndertowServletWebServerFactory undertow = new UndertowServletWebServerFactory();
        return undertow;
    }
}

创建一个新的类,加上@Configuration注解,如此就能被spring扫描到,知道这是一个配置类,再将undertow容器实例化出来,就像上边代码一样,方法上面加上注解@Bean就可以将方法返回的这个对象归于spring容器来管理,你看这个@Bean注解像不像是以前的<bean>标签。

如此我们就再启动一下试试效果。

扫描二维码关注公众号,回复: 10905123 查看本文章

瞅瞅,瞅瞅!这不就解决了,不就使用undertow启动了嘛。在查阅资料的过程中,又是涉及自动配置原理,又是源码分析的,看得我头晕目眩,反正总之就这一句话,你把这个undertow对象交给spring容器,springboot就会自动配置并使用undertow来作为web容器。

 
发布了24 篇原创文章 · 获赞 9 · 访问量 6045

猜你喜欢

转载自blog.csdn.net/SiuMu_/article/details/102649545