UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

Java

【Java】デフォルトコンストラクタをprivateにしてたらObjectMapperでデシリアライズが失敗した

JacksonのObjectMapperを使って、あるオブジェクトをデシリアライズしようとしたところ「ofコンストラクタが見つからない」というエラーが発生してでシリアライズが失敗した 原因はわからないままだが、やったことをメモ 失敗したクラスは以下 @Value public…

【Java】Lombokでつくったインスタンスをcloneしたい

Lombokを使っていて、あるクラスに@BuilderをつけてBuilderパターンでインスタンス生成した projectlombok.org このインスタンスをcloneして、あるプロパティの値だけを上書きしたくなったので方法を調べた @Builder(toBuilder = true) @Builderのアノテーシ…

【Spring Boot】AutoConfigureで特定のライブラリがクラスパス上に存在する場合に適用するようにしたい

Spring BootのAutoConfigureでライブラリを作る際に、特定のライブラリがクラスパス上に存在する場合にBean定義した設定を適用するようにしたい AutoConfigureとは 3rdパーティライブラリなどに対して、ある設定をした上でSpring上で利用したい場合に、それ…

【Spring Boot】@Configurationアノテーションの(proxyBeanMethods = false)とは

Springの以下のアノテーションの使い方がわからなかったので調べた @Configuration(proxyBeanMethods = false) これはBean Lite Modeと呼ばれるものらしく、CGLIB proxy を明示的に利用せずBean登録する設定らしい CGLIBとは、プログラムのコンパイル後にク…

【GAE】AppEngineサーバーの一時ファイル置き場

GCSにあるファイルを取得してそのままStreamとして使ったときにOutOfMemoryが発生した 一つの対策案としてGCSにあるファイルを一度AppEngineのサーバーのローカルに置いて、そのローカルのファイルを読んで使うとどうなるかという案がでたので試したい この…

【Java】GCSからjsonファイルを取得してstreamにする

JavaでGCSにあるファイルを取得してStreamにしたい 公式ドキュメントだとファイルを特定のフォルダにダウンロードする方法が紹介されている cloud.google.com これをファイルダウンロードせずにStreamにする方法を調べた com.google.cloud.storage.Blobクラ…

【Java】GCSからjsonファイルをダウンロードする

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】リストを指定した件数ずつに分割する

Javaで数万件の要素をもつリストを1000件ずつのリストに分割したい いわゆるパーティションというやつだが、Javaの標準ライブラリにはないみたい こちらを参考にしたところ、いくつかやり方があるみたいだが外部ライブラリは極力いれたくない www.baeldung.c…

【Java】VavrのTupleに変わるもの

前まで VavrというJavaの関数型ライブラリを使っていたが、いまはそれをやめている ただVavrの Tupleというクラスが便利だったので、いまの環境でやれないか調べた Spring frame work(org.springframework.data.util.Pair) SpringにPairというライブラリが…

【Java】スレッドセーフ

以前ConcurrentHashMapについて調べた時にJavaのスレッドセーフについてちゃんと説明できないと思ったので調べた 【Java】HashMapとConcurrentHashMap - UGA Boxxx ちょっと古いけどこちらの本の第二章を参考にした Java並行処理プログラミング ―その「基盤…

【Java】MapStructのMappingアノテーション内で式を使わなくてもよかった

以前にMapStructのMappingアノテーション内で式を使ってオブジェクト間のマッピング処理を行なったが、そんなことを書かずともMapStructで実現できた 以前の記事 uga-box.hatenablog.com 例としてあげたのは下のようなプロパティをもつDTOを private BigDeci…

【Java】HashMapとConcurrentHashMap

Javaで書かれた人のコードをみていてConcurrentHashMapを使っているのを見つけた HashMapの同期化には問題があるのは頭の片隅にはあったが、Javaを普段書かないので、なにが問題なのか、ConcurrentHashMapとの違いが自分の中で説明ができなかったので調べる…

【Java】Java17がリリースされたのでキャッチアップ

9月にJava17がリリースされた Java11あたりからのアップデートが滞っていたのでキャッチアップしたい そんなとき、Java女子部イベントの資料が丁度よかったのでこちらを参考にさせてもらった speakerdeck.com 知らなかったことだけ JEP 361: Switch Expressi…

【Java】Javaでハッシュ値を生成する

Javaである検索条件に対する結果オブジェクトをjsonにしてGCSに格納する このときファイル名を検索条件をハッシュ化したものにしたい Javaでのハッシュ値の生成の方法を調べた Javaでハッシュ値を生成 Javaでハッシュ値を生成するには、Javaの標準機能である…

【Java】GCSにjsonファイルをアップロードする

すでにSpring BootでGCSにjsonファイルをアップロードする機能を実装していて動作確認済みなのだが、のちのち見つけた下の公式ドキュメントの方法と微妙にやり方がちがったので、どちらがよいのかを調べた ドキュメントは以下 cloud.google.com 実装したClou…

【Java】Java Bean Mappingライブラリ

Java Bean間のマッピングにMapStructを使っている uga-box.hatenablog.com 他にどんなものがあるのか気になっていたが、下の記事にまとまっていたので、これをもとに自分でもまとめてみた www.baeldung.com Dozer https://github.com/DozerMapper/dozer#what…

【Java】実行時間の計測

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】joinメソッドで文字列を連結する

普段Javaを触らないので、いまさらJavaのjoinメソッドをしった Java8で追加されたAPIで、Java7以前では以下のような書き方をしていたが List<String> stringList = new ArrayList<>(); stringList.add("foo"); stringList.add("bar"); stringList.add("baz"); Spring</string>…

【Java】パッケージjavax.xml.bindは存在しません

ソースコードは変更していないにもかかわらず、JAXBを使用してXMLデータをパースしているコードでJAXBクラスが見つからないことを示すエラーが発生した try { JAXBContext context = JAXBContext.newInstance("com.acme.foo"); Unmarshaller unmarshaller = …

【Java】ざっくりMapStruct

JavaのライブラリのMapStructを使うことになったので、ざっくり調べる mapstruct.org MapStruct は Annotation Processor を使って、Javaのオブジェクト間のマッピングに対するコードをコンパイル時に自動生成するマッピングライブラリ 複数のレイヤーで構成…

【Jackson】JavaのZonedDateTime型とESのdateタイプ(strict_date_time)のアンマッチ対策

Elasticsearchのあるインデックスにdateタイプのフィールドを定義し、そこにバッチの開始日時を格納していた dateタイプで使っているフォーマットはstrict_date_time "startDateTime": { "type": "date", "format": "strict_date_time" }, strict_date_time…

【Vavr】反復処理でインデックスを使いたい

Vavrを利用して次のようなリストを定義した時、要素を繰り返し処理し同時に要素番号(index)にアクセスしたい List<Integer> integers = List.of(1, 2, 3); JavaScriptだと以下のようにしてindexがとれるがVavrの場合はどうやるのか integers.forEach((item, index) </integer>…

【Cloud Build】JavaのアプリケーションをAppEngine Deployする

これまでSpring Cloud GCP で Secret Manager に登録した秘密情報をアプリケーションの設定値として設定できるようにしてきて、これをデプロイするところまで行った uga-box.hatenablog.com uga-box.hatenablog.com あとはこれをCloud BuildでAppEngine Depl…

【Spring Boot】@ConfigurationProperties

Spring Bootの@ConfigurationPropertiesをうすくおさらい @ConfigurationPropertiesを使うとプロパティファイルで定義されたプロパティへ簡単にアクセスすることができる propertiesファイルを以下のように定義する user.firstName=John user.lastName=Doe u…

【Java】数字の文字列のはずがBigDecimalへの型変換でNumberFormatExceptionになる

あるAPIのレスポンスの結果で、長さの単位のフィートの項目がある このフィートの値は文字列でセットされているので、のちのち計算するためBigDecimalに型変換したい すごく単純に、以下のように型変換するだけでよいと思ったがNumberFormatExceptionが発生…

【Java】StringとEnumへの変換

言語のEnumクラスを以下のように定義していたとき、文字列の"EN"や"JA"からEnumに変換したくなった public enum Language { EN("en"), JA("ja"); private final String code; Language(String code) { this.code = code; } public String getCode() { return…

【Maven】pom.xmlにprofileを設定する

MavenプロジェクトをGAEにデプロイする時、複数のapp.yamlを用意しておいてデプロイ先のサービスを切り替えたい app.yamlはGAEの設定が書かれているファイルで、このような感じでGAEのサービス名を指定することができる ... service: foo-service ... このfo…

【Jib】 Jibとは?

Java アプリケーションを動かすDockerコンテナイメージをつくりたい そんなときjibというツールを知ったので調査してみた github.com Jibは、Javaアプリケーション用に最適化されたDockerイメージをつくることができるMavenまたはGradleのプラグイン 【利点…

【Java】Consumer

Javaの実装でxxxConsumerクラスというのを見つけて、こういうクラスはどういうものなのかを調べた この記事でなんとなくわかった qiita.com Consumerはつまり、引数を消費するインスタンスを定義するためのインターフェイス 引数は取るが返り値は存在しない…

【Java】@ComponentScanと@import

Spring Bootで作られたアプリの実装をみていて、@ComponentScanと@Importの使い分けがよくわからなかったので調査する どちらもマルチモジュール のように複数のプロジェクトでクラスを共有したりするときに使う ただ、@ImportではConfigurationを、@Compone…