2017-10-26 10 views
0

スレッドプールをオーバーライドするコードの下に書いています。しかし、正常に動作していません。春のブートアプリケーションの起動時にスレッドプールをオーバーライドする正しい方法は何ですか。私はサーバインスタンス上の私のコードでコントロールを持っていないので、サーバーのインスタンス化は私の必要性のための解決策ではないことに注意してください。Springブートアプリケーションのスレッドプールを無効にする方法

 @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);   
        }); 
       } 
      }; 
     } 

iはコードを実行すると、それは

「メイン」スレッドでエラーの下 例外をスローした
java.util.concurrent.RejectedExecutionException: [email protected] id=0 keys=0 selected=0 
    at org.eclipse.jetty.util.thread.QueuedThreadPool.execute(QueuedThreadPool.java:377) 
    at org.eclipse.jetty.io.SelectorManager.execute(SelectorManager.java:125) 
    at org.eclipse.jetty.io.SelectorManager.doStart(SelectorManager.java:255) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 
    at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132) 
    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:106) 
    at org.eclipse.jetty.server.AbstractConnector.doStart(AbstractConnector.java:260) 
    at org.eclipse.jetty.server.AbstractNetworkConnector.doStart(AbstractNetworkConnector.java:81) 
    at org.eclipse.jetty.server.ServerConnector.doStart(ServerConnector.java:244) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 
    at org.eclipse.jetty.server.Server.doStart(Server.java:384) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 

Iはまた、サンプルメインコードによって試み、そしてそれはまた、同じエラーを与えています。

+0

チェックhttps://dzone.com/articles/spring-boot-changingconfiguring-the-default-embedded-server –

答えて

2

ここでは、プロパティと異なる種類のスレッドプールを使用して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; 
    } 
} 
+0

感謝。解決策は短く単純です。 –

関連する問題