web-dev-qa-db-ja.com

Spring Bootと埋め込みTomcatでこのプロパティを設定するにはどうすればよいですか?

Application.propertiesファイルでconnectionTimeoutなどのプロパティを設定しますか、それとも別の場所に設定しますか? Googleからこれを理解することはできません。

Tomcatプロパティリスト

これを見つけました Spring-Bootの例 ですが、connectionTimeoutプロパティが含まれておらず、server.Tomcat.connectionTimeout=60000 application.propertiesファイルでエラーが発生します。

7

Spring Boot 1.4以降

Spring Boot 1.4では、プロパティ_server.connection-timeout_を使用できます。 Spring Bootの 一般的なアプリケーションプロパティ を参照してください。

Spring Boot 1.3およびそれ以前

カスタマイズされたEmbeddedServletContainerFactory Beanを提供します。

_@Bean
public EmbeddedServletContainerFactory servletContainerFactory() {
    TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();

    factory.addConnectorCustomizers(connector -> 
            ((AbstractProtocol) connector.getProtocolHandler()).setConnectionTimeout(10000));

    // configure some more properties

    return factory;
}
_

Java 8を使用していない場合、または Lambda Expressions を使用したくない場合は、次のようにTomcatConnectorCustomizerを追加します。

_    factory.addConnectorCustomizers(new TomcatConnectorCustomizer() {
        @Override
        public void customize(Connector connector) {
            ((AbstractProtocol) connector.getProtocolHandler()).setConnectionTimeout(10000);
        }
    });
_

setConnectionTimeout()メソッドは、ミリ秒単位のタイムアウトを想定しています( Apache Tomcat 8構成リファレンスconnectionTimeoutを参照)。

26
hzpz

サーバーを起動する前にシステムプロパティのセットを選択します。

/**
 * Start SpringBoot server
 */
@SpringBootApplication(scanBasePackages= {"com.your.conf.package"})
//@ComponentScan(basePackages = "com.your.conf.package")
public class Application {
    public static void main(String[] args) throws Exception {
        System.setProperty("server.port","8132"));
        System.setProperty("server.Tomcat.max-threads","200");
        System.setProperty("server.connection-timeout","60000");
        ApplicationContext ctx = SpringApplication.run(Application.class, args);
    }
}
4
Juraj

スプリングブート2.x以降では、埋め込みTomcatの実装方法が変更されています。

以下のコードを参照してください。

import org.Apache.coyote.http11.AbstractHttp11Protocol;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.embedded.Tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.context.annotation.Configuration;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@Configuration
public class TomcatCustomizer implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {

    @Autowired
    private ContainerProperties containerProperties;

    @Override
    public void customize(TomcatServletWebServerFactory factory) {
        factory.addConnectorCustomizers(connector -> {
            AbstractHttp11Protocol protocol = (AbstractHttp11Protocol) connector.getProtocolHandler();

            protocol.setMaxKeepAliveRequests(10);


            log.info("####################################################################################");
            log.info("#");
            log.info("# TomcatCustomizer");
            log.info("#");
            log.info("# custom maxKeepAliveRequests {}", protocol.getMaxKeepAliveRequests());
            log.info("# Origin keepalive timeout: {} ms", protocol.getKeepAliveTimeout());
            log.info("# keepalive timeout: {} ms", protocol.getKeepAliveTimeout());
            log.info("# connection timeout: {} ms", protocol.getConnectionTimeout());
            log.info("# max connections: {}", protocol.getMaxConnections());
            log.info("#");
            log.info(
                "####################################################################################");

        });
    }
}
2
장재훈

実際にはserver.connection-timeoutあなたのapplication.properties参照 、ブックマークすることをお勧めします。

0
rorschach