エキサイト株式会社メディア事業部エンジニアの佐々木です。Javaにrecord型が登場し、SpringBootでも結構いろいろなところで使用できるようになりました。今回は、application.ymlからrecordを使用して取り出す方法になります。
前提
環境は下記になります。
$ java --version openjdk 21.0.2 2024-01-16 LTS OpenJDK Runtime Environment Corretto-21.0.2.13.1 (build 21.0.2+13-LTS) OpenJDK 64-Bit Server VM Corretto-21.0.2.13.1 (build 21.0.2+13-LTS, mixed mode, sharing) $ ./gradlew --version ------------------------------------------------------------ Gradle 8.6 ------------------------------------------------------------ Build time: 2024-02-02 16:47:16 UTC Revision: d55c486870a0dc6f6278f53d21381396d0741c6e Kotlin: 1.9.20 Groovy: 3.0.17 Ant: Apache Ant(TM) version 1.10.13 compiled on January 4 2023 JVM: 21.0.2 (Amazon.com Inc. 21.0.2+13-LTS) OS: Mac OS X 12.5 aarch64 . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v3.2.3)
application.yml
取り出したいapplication.ymlの情報は下記になります。アプリケーション内で使用する国情報みたいなデータです。
jp: co: excite: country: - name: japan lang: - ja data: population: 126000000 capital: tokyo currency: yen timezone: Asia/Tokyo - name: united states lang: - en data: population: 328000000 capital: washington currency: dollar timezone: America/New_York
コード
コードとしては、下記になります。
@ConfigurationProperties(prefix = "jp.co.excite") public record LangListConfig (List<CountryType> country) { record CountryType(String name, List<String> lang, CountryData data) { record CountryData(String population, String capital, String currency, String timezone) {} } } // 出力 LangListConfig[ country=[ CountryType[name=japan, lang=[ja], data=CountryData[population=126000000, capital=tokyo, currency=yen, timezone=Asia/Tokyo]], CountryType[name=united states, lang=[en], data=CountryData[population=328000000, capital=washington, currency=dollar, timezone=America/New_York]] ] ]
SpringBoot3系だと、この行数でタイプセーフに記述することが可能です。設定ファイルがいくらネストしていても、同じようにrecordをネストすれば取り出せます。
まとめ
SpringBootで利用しているライブラリは、SnakeYAML
で結構いろいろできます。どんどんタイプセーフにしていきましょう。
最後に
エキサイトではフロントエンジニア、バックエンドエンジニア、アプリエンジニアを随時募集しております。長期インターンも歓迎していますので、興味があれば連絡いただければと思います。
募集職種一覧はこちらになります!(カジュアルからもOK) www.wantedly.com