Java
Postgresqlに日時のデータを保存する場合、全ての時間帯付きの日付と時刻は UTC で内部的に保存される そこで、データベースとアプリケーション間の日時の整合性を保つために、Javaアプリで扱う日時も UTC で固定したい Javaでオフセット(時差)付きの日時…
コンポーネントスキャンしてDIコンテナにBeanを登録する際、Bean構築後にクラスで1度だけ実行される事前処理を行いたい この時、@PostConstructをつけるとよいことを知った docs.oracle.com 以下のように該当メソッドに@PostConstructをつければ良い @Compo…
Lombokの@SneakyThrows はチェック例外を非チェック例外にして投げ直してくれる機能 projectlombok.org チェック例外は try - catch で捕獲する必要がありコードが若干冗長になってしまう、そこで@SneakyThrowsを使うとチェック例外を非チェック例外のように…
2つのパスを結合したい時にはPath.resolveを使えば良いことを知った docs.oracle.com Path.resolveの簡単な使い方 Path path1 = Paths.get("/Users/user/Documents"); Path path2 = Paths.get("file.txt"); Path resolvedPath = path1.resolve(path2); Syst…
最大で1,000要素になる可能性があるリストで、もし800要素以上ある場合は800要素以下のリストと残りの要素のリストに分けたい これはJavaでどうするんだっけ?と思ったので調べた List.subList を使う List.subListというのがあったので、普通にこれを使うの…
Javaライブラリであるgoogle-cloud-storageを使うと、BlobクラスのdownloadToメソッドを使用して、GCSバケット内のオブジェクト(Blob)をローカルにダウンロードできる cloud.google.com 使い方は以下のような感じ import com.google.cloud.storage.Blob; i…
Javaのアプリケーションで非同期処理を実装して、パフォーマンスを向上したい この時@Asyncアノテーションを知ったので調べた @Asyncアノテーションは、JavaのSpring Bootフレームワークで非同期処理を実装する際に使用される これを使用すると、メソッドが…
JavaのElasticsearchクライアントライブラリRestHighLevelClientをMockitoでモック化したかったが単純ではなかった 通常、Mockitoでモックする場合は以下のようにするだけ RestHighLevelClient esClient = mock(RestHighLevelClient.class); when(esClient.m…
Javaのstreamを使ってコレクションの中から最小値を求めたい なんとなくminを使えば?と思って以下のようにしてみたが上手くいかなかった class Product { public BigDecimal price; } List<Product> products; products.stream().min((Product) p -> p.price); javad</product>…
JavaのVavrという関数型ライブラリを使っていたときに、反復処理でインデックスを使いたい場合はzipWithIndexというのを使っていた uga-box.hatenablog.com ただ、いまはVavrを使うのをやめており、使わないでインデックスが必要なときにどうするか調べた こ…
Java9で追加されたflatMap(Optional::stream)という関数を知ったのでメモ docs.oracle.com これはOptionalオブジェクトが保持する値が非nullの場合はその値だけを持つstreamを返し、nullの場合は空のstreamを返す関数 今まではfilter(Optional::isPresent).m…
JavaでDBのアクセスを含むテストを書くときにTestContainersというライブラリが便利だと知ったので調べた TestContainersは、JUnitのテストをサポートするJavaのライブラリで、Dockerコンテナ上でDBやSelenium web browserなどを起動することができます。 ww…
JacksonのObjectMapperを使って、あるオブジェクトをデシリアライズしようとしたところ「ofコンストラクタが見つからない」というエラーが発生してでシリアライズが失敗した 原因はわからないままだが、やったことをメモ 失敗したクラスは以下 @Value public…
Lombokを使っていて、あるクラスに@BuilderをつけてBuilderパターンでインスタンス生成した projectlombok.org このインスタンスをcloneして、あるプロパティの値だけを上書きしたくなったので方法を調べた @Builder(toBuilder = true) @Builderのアノテーシ…
Spring BootのAutoConfigureでライブラリを作る際に、特定のライブラリがクラスパス上に存在する場合にBean定義した設定を適用するようにしたい AutoConfigureとは 3rdパーティライブラリなどに対して、ある設定をした上でSpring上で利用したい場合に、それ…
Springの以下のアノテーションの使い方がわからなかったので調べた @Configuration(proxyBeanMethods = false) これはBean Lite Modeと呼ばれるものらしく、CGLIB proxy を明示的に利用せずBean登録する設定らしい CGLIBとは、プログラムのコンパイル後にク…
GCSにあるファイルを取得してそのままStreamとして使ったときにOutOfMemoryが発生した 一つの対策案としてGCSにあるファイルを一度AppEngineのサーバーのローカルに置いて、そのローカルのファイルを読んで使うとどうなるかという案がでたので試したい この…
JavaでGCSにあるファイルを取得してStreamにしたい 公式ドキュメントだとファイルを特定のフォルダにダウンロードする方法が紹介されている cloud.google.com これをファイルダウンロードせずにStreamにする方法を調べた com.google.cloud.storage.Blobクラ…
JavaでGCSにあるファイルをダウンロードする 公式ドキュメントを参考にする cloud.google.com import com.google.cloud.storage.Blob; import com.google.cloud.storage.BlobId; import com.google.cloud.storage.Storage; import com.google.cloud.storage.…
Javaで数万件の要素をもつリストを1000件ずつのリストに分割したい いわゆるパーティションというやつだが、Javaの標準ライブラリにはないみたい こちらを参考にしたところ、いくつかやり方があるみたいだが外部ライブラリは極力いれたくない www.baeldung.c…
前まで VavrというJavaの関数型ライブラリを使っていたが、いまはそれをやめている ただVavrの Tupleというクラスが便利だったので、いまの環境でやれないか調べた Spring frame work(org.springframework.data.util.Pair) SpringにPairというライブラリが…
以前ConcurrentHashMapについて調べた時にJavaのスレッドセーフについてちゃんと説明できないと思ったので調べた 【Java】HashMapとConcurrentHashMap - UGA Boxxx ちょっと古いけどこちらの本の第二章を参考にした Java並行処理プログラミング ―その「基盤…
以前にMapStructのMappingアノテーション内で式を使ってオブジェクト間のマッピング処理を行なったが、そんなことを書かずともMapStructで実現できた 以前の記事 uga-box.hatenablog.com 例としてあげたのは下のようなプロパティをもつDTOを private BigDeci…
Javaで書かれた人のコードをみていてConcurrentHashMapを使っているのを見つけた HashMapの同期化には問題があるのは頭の片隅にはあったが、Javaを普段書かないので、なにが問題なのか、ConcurrentHashMapとの違いが自分の中で説明ができなかったので調べる…
9月にJava17がリリースされた Java11あたりからのアップデートが滞っていたのでキャッチアップしたい そんなとき、Java女子部イベントの資料が丁度よかったのでこちらを参考にさせてもらった speakerdeck.com 知らなかったことだけ JEP 361: Switch Expressi…
Javaである検索条件に対する結果オブジェクトをjsonにしてGCSに格納する このときファイル名を検索条件をハッシュ化したものにしたい Javaでのハッシュ値の生成の方法を調べた Javaでハッシュ値を生成 Javaでハッシュ値を生成するには、Javaの標準機能である…
すでにSpring BootでGCSにjsonファイルをアップロードする機能を実装していて動作確認済みなのだが、のちのち見つけた下の公式ドキュメントの方法と微妙にやり方がちがったので、どちらがよいのかを調べた ドキュメントは以下 cloud.google.com 実装したClou…
Java Bean間のマッピングにMapStructを使っている uga-box.hatenablog.com 他にどんなものがあるのか気になっていたが、下の記事にまとまっていたので、これをもとに自分でもまとめてみた www.baeldung.com Dozer https://github.com/DozerMapper/dozer#what…
Javaで処理の実行時間を調べたい ZonedDateTime.now()でstartとendを算出し、ChronoUnitでその間の時間をだすようにするのがよさそう https://docs.oracle.com/javase/jp/8/docs/api/java/time/ZonedDateTime.html https://docs.oracle.com/javase/jp/8/docs…
普段Javaを触らないので、いまさらJavaのjoinメソッドをしった Java8で追加されたAPIで、Java7以前では以下のような書き方をしていたが List<String> stringList = new ArrayList<>(); stringList.add("foo"); stringList.add("bar"); stringList.add("baz"); Spring</string>…