■Spring Boot の小径 第4歩 Spring Boot 匍匐前進 |
4-8)環境設定の外部ファイル注入 |
Spring Bootでは、すでにご理解いただいている通り、 設定ファイルで色々な追加機能をBean定義してDIコンテナに注入する方法がとれないため 4-2)入力チェックで紹介した、MessageConfig.javaで行ったような方法で実装する必要があります。 @Configurationアノテーションを付加したクラスを作成し、 必要な機能を持つメソッドを作成して、@Beanアノテーションを付加します。 ものによっては、WebMvcConfigurerAdapterクラスから継承したメソッドを @Overrideアノテーションでオーバーライドします。 本来は、@Beanアノテーションだけでよいクラスと、WebMvcConfigurerAdapterクラスを継承したクラスを 別々に用意した方が良いとは思いますが、外部注入の定義が一括でできるので ちょっと手抜きして一つのクラスにまとめてしまいました。 @Configurationアノテーションを付与することで、アプリケーション起動時にDIコンテナに登録されます。 Spring-MVCの設定ファイル(applicationContext.xml)では、メッセージリソースファイルの指定以外にも、 いくつかのクラスをBean定義しました。 ファイルアップロードサイズ制限や、ContentNegotiationConfigurerのON/OFF指定、 さらに、tomcatデプロイメント記述子(web.xml)では、DispatcherServletに対して リクエストURLパターンの指定も行いました。 詳しくは、「■SpringMVC の小径 第4歩 Spring-MVCの初期設定」を読んでもらえれば 具体的に解説しています。 この節ではこれらの機能と、さらにその設定値を外部ファイル(application.properties) から設定を注入するクラスWebConfig.javaをご紹介します。 前出のメッセージリソース定義クラス(MessageConfig.java)は、WebConfig.javaにまとめることにします。 |
まず、WebConfig.javaに設定する設定値を定義する外部ファイルを解説します。 src/main/resources/application.properties これは、すでに「4-6)MyBatisによるDB連携」で出現済みですが 今回作成したWebConfig.java用に、新しく定義を追加してあります。 リクエストマッピングパターン、メッセージリソースファイル定義、ContentNegotiationConfigurer定義 ファイルアップロード最大サイズ定義の以上です。 定義の先頭に # がある項目はコメント扱いとなっており、 定義がない場合は、次に解説するコンフィグクラスでデフォルト値が使われます。 |
次に、アプリケーションコンフィグ設定クラスの実体です。 src/main/java/jp/dip/arimodoki/config/WebConfig.java まず、クラスに対して@PropertySourceアノテーションで、注入する値を取得する外部ファイルを指定します。 このプロジェクトでは、application.properties を使います。 @PropertySourceアノテーションで、設定されている各種定義を読み込んで、クラス変数に取り込みます。 application.propertiesに未定義の場合はデフォルト値を定義しておきます。 デフォルト値は、それぞれのクラス変数の、@Valueアノテーションで指定します。 1)messageSourceメソッド メッセージリソースをDIコンテナに登録します。 このプロジェクトでは、クラスパス(sec/main/resources)配下の、classpath:/ValidationMessagesを指定しています。 2)dispatcherRegistrationメソッド リクエストURLマッピングパターンをDIコンテナに登録します。 このプロジェクトでは、*.xhtmlを指定しています。 ※)ただしこれを使用すると、classpath:/static/ 配下のファイル拡張子が *.xhtml 以外判別しなくなってしまうので 注意が必要です。 具体的には、css、js、png などの静的コンテンツファイルが見えなくなってしまいます。 詳しくは、次節で説明する予定です。 3)createMultipartResolverメソッド ファイルアップロード時の、サイズ制限を設定します。。 4)configureContentNegotiationメソッド このプロジェクトでは、リクエストURLマッピングパターンを。*.xhtmlとしていますが、 この拡張子で、@RestController形式でJSONを返す場合、HTTP Status 406が返ってしまうため。 これを防ぐため、設定をOFFにしています。 *5)addResourceHandlersSpringメソッド Spring Bootで扱う静的コンテンツ(css、 js、 imagesなど)のマッピングを 実装しようと悪戦苦闘してみましたが、惨敗に終わっています。 一応無残な敗北の備忘録として載せておきます。 詳しくは、次節で紹介する予定です。 |
これで、Spring-MVCの設定ファイル(applicationContext.xml)で実装した機能は、 Spring Boot 環境でも一通りそろいました。 他に外部注入で追加したい機能が出てきたときは、この要領で application.propertiesと、WebConfig.javaを拡張していけばよいことになります。 |
4-7)Spring Boot グラフサンプル ![]() |
4-8)環境設定の外部ファイル注入 |
![]() |