SpringBootで複数のapplication.ymlの読み込んで、環境ごとの起動をラクにする

エキサイト株式会社エンジニアの佐々木です。SpringBootではapplication.ymlなどの設定情報を読み込む方法がいくつかあるのでまとめます。 前提 設定ファイル一覧 コード 起動引数で設定される値を変える 補足./gradlew bootRun の場合 設定ファイルの中で指…

Spring AI に入門する

エキサイト株式会社エンジニアの佐々木です。詳細は話せませんがAI系の業務が発生したので、技術選定の一環でSpring AIを触ってみました。 前提 手順 1. Spring CLI をインストールする 2. Spring CLIでAI用のプロジェクトを作成する 3. OpenAIのAPIキーを取…

SpringBootの階層の深いapplication.ymlをrecordで取り出す

エキサイト株式会社メディア事業部エンジニアの佐々木です。Javaにrecord型が登場し、SpringBootでも結構いろいろなところで使用できるようになりました。今回は、application.ymlからrecordを使用して取り出す方法になります。 前提 application.yml コード…

htmxのhx-swap-oobとhx-select-oobを理解する

エキサイト株式会社エンジニアの佐々木です。htmxのhx-swap-oobとhx-select-oobを理解します。 前提 hx-swap-oob hx-select-oob まとめ 最後に 前提 HTML内にhtmxをロードしてください。 <script src="https://unpkg.com/htmx.org@1.9.11" integrity="sha384-0gxUXCCR8yv9FM2b+U3FDbsKthCI66oH5IA9fHppQq9DDMHuMauqq1ZHBpJxQ0J0" crossorigin="anonymous"></script> hx-swap-oob h…

SpringBoot3 x Thymeleaf で標準のレイアウトを使用する

エキサイト株式会社メディア事業部エンジニアの佐々木です。SpringBoot3でMPAアプリケーションを開発する場合に、Thymeleafテンプレートを使用することは、ほぼデファクトになるかと思います。今回はThymeleafのフラグメントを使用した簡単なレイアウトファ…

SpringBootでの複数キャッシュサーバがある場合の切り替え

エキサイト株式会社エンジニアの佐々木です。エキサイトホールディングスのカレンダー | Advent Calendar 2023 - Qiitaの9日目を担当させていただきます。SpringBootでキャッシュ先を複数にする場合の設定をご紹介します。 前提 モチベーション コード まと…

IntelliJでThymeleafの補完が効くように設定する

エキサイト株式会社メディア事業部佐々木です。エキサイトHDアドベントカレンダー2023の15日目を担当させていただきます。メディア事業部では、SpringBoot/ThymeleafでMPAの開発を行っているところもあるのですが、HTML上での補完の効きが悪いというのがあり…

JavaのシリアライザであるKryoで圧縮設定を追加する

エキサイト株式会社メディア事業部エンジニアの佐々木です。以前Kryoを用いてJava内のデータをシリアライズする記事を書きました。 tech.excite.co.jp その後、弊社内でもポツポツKryoを使っていますが、Kryo公式にシリアライズデータをさらに圧縮する方法が…

ArchUnitを入れて、プロジェクト内のアーキテクチャルールをテストする

エキサイト株式会社メディア事業部エンジニアの佐々木です。弊社アドベントカレンダー5日目を担当させていただきます。メディア事業部では、SpringBootを用いて日々ソフトウェア開発を行っていますが、サービスが大きくなったり人が増えたりするとアーキテク…

SpringBootとキャッシュライブラリCaffeineでローカルキャッシュサーバを作成する

エキサイト株式会社メディア事業部エンジニアの佐々木です。2024年アドベントカレンダー2日目を担当させていただきます。 サーバーローカルでのキャッシュはHashMap等で自作してもいいのですが、キャッシュ期限を自作するのは結構面倒なので、Caffeineを使用…

SpringBootとInfinispanの組み込みモードでローカルなキャッシュ機構を作る

エキサイト株式会社エンジニアの佐々木です。エキサイトホールディングス 2023 advent calendar 1日目を担当させていただきます。 qiita.com 今回は、SpringBoot/Javaで、サーバローカルなキャッシュをRedHatが開発しているInfinispanの組み込みモードを使用…

タスクランナーをgo-taskにする

エキサイト株式会社メディア事業部エンジニア佐々木です。開発で使用するタスクランナーは、一般的にMakefileを使うものが多いかと思います。より簡単なgo-taskを紹介いたします。 インストール タスクファイル 実行 タスク一覧 まとめ 最後に インストール …

SpringBoot x mkcert を使用してHTTPSができるローカル開発環境を構築する

エキサイト株式会社エンジニア佐々木です。ローカル開発環境でHTTPSを使いたい場面がありましたので、ご紹介します。 動作環境 mkcert mkcertコマンドのインストール ローカル認証局の作成 ローカル証明書の作成 SpringBootへの適用 アプリケーションサーバ…

JavaのシリアライザであるKryoを使う

エキサイト株式会社エンジニアの佐々木です。弊社では結構なリクエストがあるので、キャッシュをいたるところに使用しております。キャッシュサーバ等に一時的にデータを避難するために、シリアライズ・デシリアライズ処理が必須となります。一般的には、Pro…

IntelliJからGradleタスクを実行するとGradle daemonを複数起動しないようにする

エキサイト株式会社エンジニア佐々木です。IntelliJ x Gradle x SpringBoot で開発をしていますが、デフォルト設定だとローカル環境の実行時にGradle daemonが複数立ち上がってしまう事象が発生します。Gradle daemonが立ち上がると無駄にメモリを使用してPC…

SpotBugsの警告を抑止する

エキサイト株式会社メディア事業部エンジニアの佐々木です。メディア事業部ではSpringBoot/Javaで開発を行っており、静的解析ツールはSpotBugsを使用しています。ごくまれに、SpotBugsの指摘を抑止したいことがあります。Tipsとしてご紹介します。 前提 問題…

SpringBoot x Flywayで DBマイグレーションを行う.

エキサイト株式会社メディア事業部エンジニアの佐々木です。今回は、SpringBootとFlywayでDBマイグレーションを行います。DBマイグレーションなど後回しにしがちですが、簡単にマイグレーション設定ができますので、手作業を減らしていきましょう。 動作確認…

Java標準ライブラリのみでListを分割する方法

エキサイト株式会社エンジニア佐々木です。JavaでList分割する方法をJava標準のみで実装するTipsです。 環境 数字のリスト分割する List 文字列のリストを分割する List.subListを使う方法 Collectors.groupingByを使う方法 まとめ 最後に 環境 $ java --ver…

htmxをSpringBoot Thymeleafで試してみる(1)

エキサイト株式会社メディア事業部エンジニアの佐々木です。htmxは、React.jsやVue.jsなどの大きいフロントエンドフレームワークを用いることなく、SPAのような仕組みを提供してくれるライブラリになります。 htmx.org htmxとSpringBoot Thymeleafを使用して…

JacksonでJSONのフィールドの命名規則を定義する

エキサイト株式会社メディア事業部エンジニアの佐々木です。JVMでJSONを扱うときのライブラリであるJacksonのフィールド名の規則を定義します。 環境 UpperCamelCase のときのJacksonの設定 SnakeCase のときのJacksonの設定 キャメルケースやスネークケース…

SpringBootのMultiple Moduleの構成で、Moduleごとにapplication.ymlを設置する

エキサイト株式会社メディア事業部エンジニアの佐々木です。SpringBootのMulti Module構成を採用して、各プロダクトごとにモノリポでモジュラーモノリス構成を敷いています。各モジュールごとに設定ファイルを置きたいことがあります。普通にやるとハマるん…

AWS Lambda SnapStart を試してみる

エキサイト株式会社メディア開発の佐々木です。 Advent Calendarの季節が今年もやってきました。 昨年同様、エキサイトホールディングス Advent Calendarで毎日投稿される予定です。 様々な話題が投稿されるのでぜひ閲覧してみてください! qiita.com AWS La…

SpringBoot3.0でサポートされた ネイティブイメージ起動してみる

エキサイト株式会社エンジニア佐々木です。 Advent Calendarの季節が今年もやってきました。 昨年同様、エキサイトホールディングス Advent Calendarで毎日投稿される予定です。 様々な話題が投稿されるのでぜひ閲覧してみてください! qiita.com 前回、 ネ…

ネイティブJavaに向けてウォーミングアップする

エキサイト株式会社エンジニアの佐々木です。 Advent Calendarの季節が今年もやってきました。 昨年同様、エキサイトホールディングス Advent Calendarで毎日投稿される予定です。 様々な話題が投稿されるのでぜひ閲覧してみてください! qiita.com 超初心者…

JUnit5でパラメータテストをする-その2-(@NullSource,@EmptySource,@NullAndEmptySource,@CsvFileSource)

エキサイト株式会社エンジニア佐々木です。前回 JUnit5でパラメータテストをする(@ValueSource, @CsvSource, @MethodSource) - エキサイト TechBlog. でパラメータテストの一部を書かせていただきました。残りの機能をご紹介します。 前提 環境は下記になり…

JUnit5でパラメータテストを行う-その1-(@ValueSource, @CsvSource, @MethodSource)

エキサイト株式会社メディア事業部エンジニア佐々木です。JUnit5からパラメータテストが大変しやすくなったので、ご紹介します。 前提 @ValueSource @CsvSource @MethodSource まとめ 最後に 前提 環境は下記になります。 # Java openjdk version "19.0.1" 2…

JUnit5でネストしたテストと実行順序を指定する(@Nestedと@Order)

エキサイト株式会社メディア事業部の佐々木です。SpringBoot/Javaでメディア開発を行っていますが、単体テストでよく使用するJUnit5の@Nestedと@Orderの紹介です。 前提 @Nested コード Order Classの実行順を指定する場合 メソッドの実行順を指定する場合 …

SpringBootでGitの情報を取得して、APIで返却する.

エキサイト株式会社メディア事業部エンジニアの佐々木です。前回アプリケーションの情報をSpringBootアプリケーションに組み込みましたが、これに追加でGitの情報を組み込んでみます。 前回: tech.excite.co.jp 前提 JDK Version openjdk 17.0.1 2021-10-19 …

SpringBootのアプリケーション情報を生成してAPIで取得する.

エキサイト株式会社メディア事業部エンジニアの佐々木です。SpringBootのアプリケーション情報を生成し、取得活用する方法になります。 前提 Java Version openjdk 17.0.1 2021-10-19 LTS OpenJDK Runtime Environment Corretto-17.0.1.12.1 (build 17.0.1+1…

Gradleタスクを順番に実行する

エキサイト株式会社メディア事業部エンジニアの佐々木です。Gradleでタスクを順番に実行する書き方をメモしておきます。 はじめに 環境は下記になります。 ------------------------------------------------------------ Gradle 7.3.3 --------------------…