SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Spring Bootで作るマイクロサービス

Spring Bootで使われる基本的なアノーテーションと設定の仕組み

Spring Bootで作るマイクロサービス 第3回


設定ファイルの値を個別にコード内の変数にマッピングする

 設定ファイルの値をコード内で変数として利用する場合には、リスト7のように@Valueアノテーションを利用します。

[リスト7]設定ファイルの内容(java/src/main/java/com/coltware/contact/configuration/WebConfiguration.javaの抜粋)
@Configuration
public class WebConfiguration implements WebMvcConfigurer {

    @Value("${app.web.prefix}") // (1)基本の利用方法
    private String webPrefix;

    @Value("${app.web.resource:classpath:/static/}") // (2)デフォルト値を指定した設定方法
    private String webResource;

    // (省略)
}

 (1)が最も基本的なプロパティ設定値を利用する方法です。ただし、この場合に設定ファイルに指定のキーがない場合には、エラーになってしまいます。

 その場合には、(2)のようにコロン(:)を使ってデフォルト値を設定すれば指定がない場合にも対応が可能です。

 また、@Valueはフィールド以外にもメソッドにも利用できるので、設定を加工して利用したい場合などはsetterメソッドを用意して利用すればよいでしょう。

設定グループとして値を管理する

 JDBCの設定のように設定項目が多くなると設定を1つの塊として管理したくなります。その場合には、@ConfigurationPropertiesを利用します。

 @Valueを多く利用するとどこでどのような設定を使っているのかの管理がすぐに難しくなってしまうため、利用する場合にも限定した利用が望ましいと思います。

 実際、Spring Bootのソースを見てもほとんど@Valueは使われていません。

 例えば、server.portの設定を管理しているコードであるSpring Boot内のServerPropertiesクラスのソースを見てみます。

[リスト8]https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java
@ConfigurationProperties(prefix = "server", ignoreUnknownFields = true)
public class ServerProperties {
    // : 省略
    public void setPort(Integer port) {
        this.port = port;
    }
    // : 省略
}

 また、同様にspring.datasourceの管理をしているクラスであるDataSourcePropertiesクラスのソースを見て見ます。

[リスト9]https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceProperties.java
@ConfigurationProperties(prefix = "spring.datasource")
public class DataSourceProperties implements BeanClassLoaderAware, InitializingBean {
    // : 省略
    public void setDriverClassName(String driverClassName) {  // (1)spring.datasource.driver-class-nameの設定
        this.driverClassName = driverClassName;
    }
    // : 省略
    public void setUrl(String url) { // (2)spring.datasource.urlの設定
        this.url = url;
    }
    // : 省略
}

 どちらにも、@ConfigurationPropertiesという指定があり、また、prefixで設定グループ名が指定されています。例えば(1)は、spring.datasource.driver-class-nameの指定であり、大文字を“-(ハイフン)”に置き換えて読み替えることができます。

 また、(2)ではspring.datasource.urlの設定であり、どちらもprefixで指定したグループ以下の名称はsetterメソッドを使って設定が行われます。

 こういったルールで設定できる項目がわかるので、他の設定項目もどこのソースで設定が行われているかを調べると、その設定の意味などを把握する上で参考となります。

 設定項目もアノテーションと同様に網羅的な説明があるわけではありませんが、よく使われる設定などは多くの方が疑問に思うため、ブログなどにアップされている情報も多いでしょう。基本的にはそれらが参考になります。

 ただし、使っているSpring Bootのバージョンによって多少変わってしまったり、設定が増えていたりといったこともまれにあるため、筆者も疑問に思ったり、具体的に他の設定はないのかを調べる際には、上記のようにソースコードを調べてしまいます。

最後に

 Spring Bootを使っていると、自分が実装したいソースコードの内容以外に、どういったアノテーションを使えばよいのか、または、どういった設定をすれば希望する内容が有効(無効)になるのかをよく調べることになります。

 しかし、これらすべてを理解するとなると非常に大変で、また、Spring Bootの簡単に始められるといった利点をも失ってしまいます。従って、アノテーションや設定を使いこなすことを気にせずプログラムを始めるのが、Spring Bootでは大切なことだと筆者は思っています。

 ただし、問題にぶつかった時にSpring Bootの仕組みがわからないと、どこで何がおきているのかがわからないため、今回紹介した最低限の仕組みについての理解は必要だと思います。

 次回は、サンプルコードのWeb APIを作成する際に必要なアノテーションやデータベース関連のアノテーションなど機能部分について紹介します。

参考資料

 

本連載の書籍が発売されました!

Javaによる高速Webアプリケーション開発のためのSpring Boot入門

Amazon(POD) Amazon(電子書籍) その他

Javaによる高速Webアプリケーション開発のためのSpring Boot入門

著者:WINGSプロジェクト 小林昌弘
発売日:2020年5月31日(水)
価格(POD):2,200円(税込)
価格(電書):1,760円(税込)

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
Spring Bootで作るマイクロサービス連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 小林 昌弘(コバヤシ マサヒロ)

WINGSプロジェクト について> 有限会社 WINGSプロジェクト が運営する、テクニカル執筆コミュニティ(代表 ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/11509 2020/06/01 18:57

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー