Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何覆盖Spring Boot应用程序中的线程池_Spring_Spring Boot_Threadpool - Fatal编程技术网

如何覆盖Spring Boot应用程序中的线程池

如何覆盖Spring Boot应用程序中的线程池,spring,spring-boot,threadpool,Spring,Spring Boot,Threadpool,我正在编写下面的代码来覆盖线程池。但它不能正常工作。在spring boot应用程序启动中设置覆盖线程池的正确方法是什么。请注意,我的代码中没有对服务器实例的控制,因此实例化服务器不是满足我需要的解决方案 @Bean public EmbeddedServletContainerCustomizer getContainerCustomizer() { return (configurableEmbeddedServletContainer

我正在编写下面的代码来覆盖线程池。但它不能正常工作。在spring boot应用程序启动中设置覆盖线程池的正确方法是什么。请注意,我的代码中没有对服务器实例的控制,因此实例化服务器不是满足我需要的解决方案

        @Bean
        public EmbeddedServletContainerCustomizer getContainerCustomizer() {
            return (configurableEmbeddedServletContainer) -> {
                if (configurableEmbeddedServletContainer instanceof JettyEmbeddedServletContainerFactory) {
                    ((JettyEmbeddedServletContainerFactory)configurableEmbeddedServletContainer).addServerCustomizers((server) -> {
                        QueuedThreadPool newPool = new QueuedThreadPool(10);
                        QueuedThreadPool oldPool = server.getBean(QueuedThreadPool.class);
                        server.updateBean(oldPool, newPool);        
                    });
                }
            };
        }
当我执行代码时,它抛出了下面的错误 线程“main”中出现异常

我也尝试了示例主代码,但它也给出了相同的错误

public class FileServer
{
    public static void main(String[] args) throws Exception
    {
         Server server = new Server(9090);

        QueuedThreadPool newPool = new QueuedThreadPool(10);
        QueuedThreadPool oldPool = server.getBean(QueuedThreadPool.class);
        server.updateBean(oldPool, newPool);


        ResourceHandler resource_handler = new ResourceHandler();

        resource_handler.setDirectoriesListed(true);
        resource_handler.setWelcomeFiles(new String[]{ "index.html" });
        resource_handler.setResourceBase(".");

         HandlerList handlers = new HandlerList();
        handlers.setHandlers(new Handler[] { resource_handler, new DefaultHandler() });
        server.setHandler(handlers);

         server.start();
        server.join();
    }
}

下面是一个在Jetty中使用属性和不同类型的线程池配置线程池的示例。在我的例子中,线程池是
InstrumentedQueuedThreadPool

@Configuration
public class CustomJettyConfiguration {

    @Bean
    public JettyEmbeddedServletContainerFactory jettyEmbeddedServletContainerFactory(
            @Value("${server.port:8080}") final String port,
            @Value("${jetty.threadPool.maxThreads:600}") final String maxThreads,
            @Value("${jetty.threadPool.minThreads:10}") final String minThreads,
            @Value("${jetty.threadPool.idleTimeout:5000}") final String idleTimeout) {
        final JettyEmbeddedServletContainerFactory factory =
                new JettyEmbeddedServletContainerFactory(Integer.valueOf(port));

        // Tweak the connection pool used by Jetty to handle incoming HTTP connections
        InstrumentedQueuedThreadPool instThreadPool =
                new InstrumentedQueuedThreadPool(registry);
        instThreadPool.setPrefix("jetty");
        instThreadPool.setMaxThreads(Integer.valueOf(maxThreads));
        instThreadPool.setMinThreads(Integer.valueOf(minThreads));
        instThreadPool.setIdleTimeout(Integer.valueOf(idleTimeout));
        factory.setThreadPool(instThreadPool);

        ...
        return factory;
    }
}

下面是一个在Jetty中使用属性和不同类型的线程池配置线程池的示例。在我的例子中,线程池是
InstrumentedQueuedThreadPool

@Configuration
public class CustomJettyConfiguration {

    @Bean
    public JettyEmbeddedServletContainerFactory jettyEmbeddedServletContainerFactory(
            @Value("${server.port:8080}") final String port,
            @Value("${jetty.threadPool.maxThreads:600}") final String maxThreads,
            @Value("${jetty.threadPool.minThreads:10}") final String minThreads,
            @Value("${jetty.threadPool.idleTimeout:5000}") final String idleTimeout) {
        final JettyEmbeddedServletContainerFactory factory =
                new JettyEmbeddedServletContainerFactory(Integer.valueOf(port));

        // Tweak the connection pool used by Jetty to handle incoming HTTP connections
        InstrumentedQueuedThreadPool instThreadPool =
                new InstrumentedQueuedThreadPool(registry);
        instThreadPool.setPrefix("jetty");
        instThreadPool.setMaxThreads(Integer.valueOf(maxThreads));
        instThreadPool.setMinThreads(Integer.valueOf(minThreads));
        instThreadPool.setIdleTimeout(Integer.valueOf(idleTimeout));
        factory.setThreadPool(instThreadPool);

        ...
        return factory;
    }
}

在SpringBoot2.x中,JettyEmbeddedServletContainerFactory已被SpringBoot2.x中的org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory取代,
JettyEmbeddedServletContainerFactory
已被
org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory

替换。检查检查感谢您的快速回答。解决方案简单明了。感谢您的快速回答。解决方案简单明了。谢谢您的回答。请考虑添加一些描述性内容,例如在线源,如何迁移,等等…谢谢您的回答。请考虑添加一些描述性内容,例如在线源、如何迁移等等。