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 --------------------…

SpringBoot x GradleをIntelliJで開発するときは、IntelliJからGradleのタスクを起動する

エキサイト株式会社メディア事業部エンジニアの佐々木です。メディア事業部では、SpringBoot、Gradle、IntelliJでリビルド開発を日々行っています。Dockerを使ったローカル環境での開発を行っています。開発でのSpringBootの起動方法は複数ありますので、3つ…

SpringBootでコンテナイメージの作成をする

エキサイト株式会社メディア事業部エンジニアの佐々木です。メディア事業部ではSpringBootで開発しています。SpringBootには標準でDockerFileなしでコンテナイメージを生成してくれる機能があるので、ご紹介します。 はじめに コンテナイメージ作成 まとめ …

複数のIntelliJのプロジェクトをタブにまとめるちょっとしたTips

結論 前提 設定方法 やってみて 最後に エキサイト株式会社エンジニアの佐々木です。立場上、複数のプロジェクトをIntelliJで立ち上げることが多く、Windowがバラバラになってしまい使いにくかったんで、技術ブログに書くほどではない小さなTipsですが、調べ…

プロジェクト/リポジトリごとにJVMのバージョンを切り替える

エキサイト株式会社メディア事業部エンジニアの佐々木です。 メディア事業部では、最近JVMを利用した開発が増えてきており、プロジェクトやリポジトリごとにバージョンが変わったりが起きています。これをなるべく自動で切り替える方法をご紹介します。 前提…

SpringBootのInterceptorでテンプレートをモバイルとデスクトップでわける

エキサイト株式会社のエンジニアの佐々木です。SpringBootとThymeleafを使ってリビルドしていますが、既存テンプレートがモバイル用とデスクトップ用でわかれているので、Interceptorを使って対応します。 前提 SpringBoot x Gradleを使います。 build.gradl…

build.gradle内でIntelliJのGroovyの補完を効かせる

エキサイト株式会社メディア開発の佐々木です。build.gradle内でIntelliJのGroovyの補完を効かせる方法です。 Gradleとは Groovy製のビルドツールになります。Javaを始めAndroidやC/C++でも使えるようです。モジュールの依存関係の解決やちょっとした処理をG…

JEP378を読んで、テキスト変換の方法をおさらいする

エキサイト株式会社エンジニアの佐々木です。Java17が昨年リリースされ、JEP378のテキストブロックがLTSとして入ったので改めてJEP378を読むとテキスト変換の方法がいくつか書いてあったので、復習がてらおさらいします。 openjdk.java.net テキストブロック…

SpringBoot DevToolsのHot RestartとLiveReloadでサクサク開発を行う

エキサイト株式会社エンジニアの佐々木です。2021年エキサイトホールディングス アドベントカレンダー19日を担当させていただきます。 余談 エキサイトのメディア事業部では、SpringBootを使用して過去の技術的負債に立ち向かっております。私がジョインして…

SpringBootでEventListenerの実装

エキサイト株式会社エンジニアの佐々木です。2021年Exciteホールディングスアドベントカレンダー17日目を担当させていただきます。 SpringBootでのイベントリスナーの実装についてです。 はじめに SpringBootでは、アノテーションを用いたイベントリスナーの…