1. 概要

Spring Bootは多くのことを実行できます。 このチュートリアルでは、Bootのより興味深い構成オプションのいくつかについて説明します。

2. ポート番号

メインのスタンドアロンアプリケーションでは、メインのHTTPポートのデフォルトは8080です。 別のポートを使用するようにブートを簡単に構成できます

server.port=8083

そして、YAMLベースの構成:

server:
    port: 8083

サーバーポートをプログラムでカスタマイズすることもできます。

@Component
public class CustomizationBean implements
  WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {
 
    @Override
    public void customize(ConfigurableServletWebServerFactory container) {
        container.setPort(8083);
    }
}

3. コンテキストパス

デフォルトでは、コンテキストパスは「/」です。 それが理想的ではなく、/ app_name のようなものに変更する必要がある場合は、プロパティを介してこれをすばやく簡単に行う方法を次に示します。

server.servlet.contextPath=/springbootapp

また、YAMLベースの構成の場合:

server:
    servlet:
        contextPath:/springbootapp

最後に、変更はプログラムで行うこともできます。

@Component
public class CustomizationBean
  implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {
 
    @Override
    public void customize(ConfigurableServletWebServerFactorycontainer) {
        container.setContextPath("/springbootapp");
    }
}

4. ホワイトラベルエラーページ

構成でカスタム実装を指定しない場合、Spring BootはBasicErrorControllerBeanを自動的に登録します。

ただし、もちろん、このデフォルトのコントローラーは次のように構成できます。

public class MyCustomErrorController implements ErrorController {
 
    private static final String PATH = "/error";
    
    @GetMapping(value=PATH)
    public String error() {
        return "Error haven";
    }
}

5. エラーメッセージをカスタマイズする

Bootは、デフォルトで / error マッピングを提供して、適切な方法でエラーを処理します。

より具体的なエラーページを設定する場合は、エラー処理をカスタマイズするための統一されたJavaDSLが適切にサポートされています。

@Component
public class CustomizationBean
  implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {
 
    @Override
    public void customize(ConfigurableServletWebServerFactorycontainer) {        
        container.addErrorPages(new ErrorPage(HttpStatus.BAD_REQUEST, "/400"));
        container.addErrorPages(new ErrorPage("/errorHaven"));
    }
}

ここでは、 Bad Requestを処理して/400 パスに一致させ、その他すべてを共通パスに一致させました。

そして、非常に単純な / errorHaven の実装:

@GetMapping("/errorHaven")
String errorHeaven() {
    return "You have reached the haven of errors!!!";
}

出力:

You have reached the haven of errors!!!

6. プログラムでブートアプリケーションをシャットダウンする

あなたはプログラムの助けを借りてブートアプリをシャットダウンすることができます SpringApplication。 これは静的です出口() 2つの引数を取るメソッド: ApplicationContext ExitCodeGenerator

@Autowired
public void shutDown(ExecutorServiceExitCodeGenerator exitCodeGenerator) {
    SpringApplication.exit(applicationContext, exitCodeGenerator);
}

このユーティリティメソッドを使用して、アプリをシャットダウンできます。

7. ロギングレベルを設定する

ブートアプリケーションでログレベルを簡単に調整できます。 バージョン1.2.0以降では、メインプロパティファイルでログレベルを構成できます。

logging.level.org.springframework.web: DEBUG
logging.level.org.hibernate: ERROR

また、標準のSpringアプリと同様に、カスタマイズしたXMLまたはプロパティファイルをに追加することで、 Logback log4j log4j2などのさまざまなログシステムをアクティブ化できます。クラスパスとpom内のライブラリの定義。

8. 新しいサーブレットを登録する

組み込みサーバーを使用してアプリケーションをデプロイする場合は、従来の構成からBean として公開することにより、ブートアプリケーションに新しいサーブレットを登録できます。

@Bean
public HelloWorldServlet helloWorld() {
    return new HelloWorldServlet();
}

または、 ServletRegistrationBean:を使用することもできます。

@Bean
public SpringHelloServletRegistrationBean servletRegistrationBean() {
 
    SpringHelloServletRegistrationBean bean = new SpringHelloServletRegistrationBean(
      new SpringHelloWorldServlet(), "/springHelloWorld/*");
    bean.setLoadOnStartup(1);
    bean.addInitParameter("message", "SpringHelloWorldServlet special message");
    return bean;
}

9. ブートアプリケーションでJettyまたはUndertowを構成する

Spring Bootスターターは通常、デフォルトの組み込みサーバーとしてTomcatを使用します。 それを変更する必要がある場合は、Tomcatの依存関係を除外し、代わりにJettyまたはUndertowを含めることができます。

Jettyの構成

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
@Bean
public JettyEmbeddedServletContainerFactory  jettyEmbeddedServletContainerFactory() {
    JettyEmbeddedServletContainerFactory jettyContainer = 
      new JettyEmbeddedServletContainerFactory();
    
    jettyContainer.setPort(9000);
    jettyContainer.setContextPath("/springbootapp");
    return jettyContainer;
}

Undertowの構成

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
@Bean
public UndertowEmbeddedServletContainerFactory embeddedServletContainerFactory() {
    UndertowEmbeddedServletContainerFactory factory = 
      new UndertowEmbeddedServletContainerFactory();
    
    factory.addBuilderCustomizers(new UndertowBuilderCustomizer() {
        @Override
        public void customize(io.undertow.Undertow.Builder builder) {
            builder.addHttpListener(8080, "0.0.0.0");
        }
    });
    
    return factory;
}

10. 結論

この簡単な記事では、面白くて便利なSpringBoot構成オプションのいくつかについて説明しました。

もちろん、リファレンスドキュメントには、ブートアプリを構成してニーズに合わせて調整するためのオプションがたくさんあります。これらは、私が見つけたより便利なもののほんの一部です。

この記事で使用されているコードは、Githubリポジトリにあります。