java 如何定制spring Boot 内嵌的tomcat线程池?

k5ifujac  于 2023-01-29  发布在  Java
关注(0)|答案(2)|浏览(224)

Tomcat体系结构由以下元素组成:服务器=〉服务=〉引擎=〉主机=〉上下文

在配置标准Tomcat服务器时,我们可以通过在server.xml文件中指定以下内容来配置自定义线程池:(以下为伪代码)

<Server>
  <Service name="Catalina">
    <Connector port="8080"/>
    <Executor name="custom-pool" className="my.package.poolImplementation" />
    <Engine name="Catalina" defaultHost="localhost">  
      <Here be more elements />
    </Engine>
  </Service>
</Server>

(特别是执行器名称=“自定义池”类名=“我的包池实现”
如何配置Sping Boot 以允许编程方式相同的行为?
(不使用Spring配置文件)
无论我到哪里去找,无论我多么努力,我都找不到任何答案或例子。
先谢了

66bbxpm5

66bbxpm51#

我查找了一些源代码(参见TomcatServletWebServerFactory.java/ServletWebServerFactoryConfiguration.java),并找到了一种方法。

@Bean
public TomcatProtocolHandlerCustomizer<?> tomcatProtocolHandlerCustomizer() {
    return protocolHandler -> {
        protocolHandler.setExecutor(...);
    };
}
1szpjjfi

1szpjjfi2#

我还需要定制Tomcat,最后得到了如下代码:

@Component
public class TomcatCustomizer extends TomcatServletWebServerFactory {
  @Override
  protected void postProcessContext(Context context) {
    Engine engine = (Engine) context.getParent().getParent();
    Service service = engine.getService();
    Server server = service.getServer();
    Connector connector = service.findConnectors()[0];
  }
}

然后,您可以设置服务器、服务、引擎、连接器的不同属性。从对象服务中,您还可以访问执行器并更改它。这部分我从未尝试过。无论您更改它,它都将覆盖并完成Spring引导配置,您不会丢失Spring引导配置。

相关问题