(五)springboot项目实战jetty优化

1 介绍
springboot默认配置的是tomcat容器,tomcat是一个重量级容器,今天我来说下我搭建的springboot项目配置的是jetty容器,jetty是一个轻量级的容器。那么下面来说下springboot应该怎么引用jetty容器呢?应该怎么优化呢?

2 这里需要注意一下由于springboot web项目在创建的时候会引入spring-boot-starter-web包,这个包里是默认启动tomcat配置的,所以我们在引入jetty容器前,先剔除掉tomcat的默认配置吧,看下面的pom.xml配置吧
pom.xml配置


<dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
            <exclusions>
                
                <exclusion>
                    <artifactId>spring-boot-starter-tomcatartifactId>
                    <groupId>org.springframework.bootgroupId>
                exclusion>
                
                <exclusion>
                    <groupId>org.springframework.bootgroupId>
                    <artifactId>spring-boot-starter-loggingartifactId>
                exclusion>
            exclusions>
        dependency>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-log4j2artifactId>
        dependency>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-jettyartifactId>
        dependency>

3 pom文件中需要的jar包我们引用好了那么下面开启我们jetty启动配置之旅吧!

package com.fy.agent.api.config.jetty;

import org.eclipse.jetty.server.NCSARequestLog;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.util.thread.QueuedThreadPool;
import org.springframework.boot.context.embedded.jetty.JettyEmbeddedServletContainerFactory;
import org.springframework.boot.context.embedded.jetty.JettyServerCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author : lqf
 * @description : jetty自动配置
 * @date : Create in 14:58 2018/5/8
 */
@Configuration
public class JettyConfig {

    @Bean
    public JettyEmbeddedServletContainerFactory jettyEmbeddedServletContainerFactory(
            JettyServerCustomizer jettyServerCustomizer) {
        JettyEmbeddedServletContainerFactory factory = new JettyEmbeddedServletContainerFactory();
        factory.addServerCustomizers(jettyServerCustomizer);
        return factory;
    }


    @Bean
    public JettyServerCustomizer jettyServerCustomizer() {
        return server -> {
            threadPool(server);
            accessLog(server);
        };
    }

    private void threadPool(Server server){
        // Tweak the connection config used by Jetty to handle incoming HTTP
        // connections
        final QueuedThreadPool threadPool = server.getBean(QueuedThreadPool.class);
        //默认最大线程连接数200
        threadPool.setMaxThreads(100);
        //默认最小线程连接数8
        threadPool.setMinThreads(20);
        //默认线程最大空闲时间60000ms
        threadPool.setIdleTimeout(60000);
    }
    //jetty启动日志
    private void accessLog(Server server) {
        NCSARequestLog requestLog = new NCSARequestLog("logs/jetty-yyyy_mm_dd.request.log");
        requestLog.setAppend(true);
        requestLog.setExtended(false);
        requestLog.setLogTimeZone("GMT+08");
        requestLog.setLogLatency(true);
        requestLog.setRetainDays(60);
        server.setRequestLog(requestLog);
    }
}

上面的代码就是我项目中的jetty配置,这个配置你可以放在启动类中也可以单独写出一个jettyConfig启动类,通过@Configuration将此类标记成配置类在项目启动的时候就会去加载这个类中的信息了。个人习惯喜欢将不同的配置统一放到一个配置包中。

你可能感兴趣的:(日积月累,程序人生,java,springboot,springboot学习之路)