Java
小ネタ。業務で使ったことは無いですが、LeetCodeで必要になることが多いので自分向けに整理します。 なお、もっとよりよいやり方があれば教えていただきたいです。 環境 Java 15 ゴール 入力値は数値 戻り値は数値の配列(Listでも配列でもOK) 最も早く変…
今日も小ネタ。 NullPointerExceptionを回避するのは簡単だけど、もうちょっとスマートに書けない? ということを纏める記事。 余談ですが、NullPointerExceptionは「ぬるぽ」とか大文字取って「NPE」とか呼んでます。以後、「NPE」で統一します。 環境 Java…
超がつく小ネタ。よく忘れるのでブログ化。 環境 Java 15 結論 Optional型のofNullableメソッドでNullでも問題なく処理できるようにする。 そのあと、Stream APIのflatMapメソッドとCollection型のstreamメソッドを組み合わせる。 Optional.ofNullable(detai…
自分が知りたかったBigDecimalの知識を集める記事。なお、基本型を扱う関係上、新規性は多くありません。強いて言えば、2021年でも扱えるってことくらいですかね。 環境 Java 15 この記事を読んでわかること一覧 precisionとscale(有効桁数と精度) 型宣言 …
去年書いた記事で使用していたクラスがDeprecatedになっていたので、新しく更新します。 前回の記事を書いた時にアップデートしておけばよかったです。 変更点 ConfigFileApplicationContextInitializer から ConfigDataApplicationContextInitializer に変…
前にデータセットアップを面倒くさがって、BeanPropertySqlParameterSourceを使ってパラメータの項目名を取得していました。その時の記事。 そのまま使用していると、自分の目的通りには使えなかったので結局自作しました。 その時のメモ。 環境 Java 15 H2 …
JavaでRequestの前後に処理を挟むことができるインターセプタを実装したので、メモをします。 実装方法は色んな記事で書いてあるものの、テストまでは書いてないことが多いのでそこで差別化を図ります。 環境 Java 15 SpringBoot 2.4.1 ユースケース APIの流…
小ネタです。地味に知らなかったので、自分で纏めました。 環境 Java 15 Gradle 6.6.1 ※ なお、Spring Initializr で生成されていることを想定しています。 コマンド 次のコマンドでビルドすることを想定しています。 ./gradlew build 指定したファイル名で…
JavaでRESTが簡単にテストができるとされるRest-Assuredというライブラリを知ったので素振りしました。ですので、あまり深い話はこの記事ではしません。 なお、印象としてはSpringのMockMvcを使っているのであれば、わざわざ追加でRest-Assuredを導入はしな…
JavaでCSVを読み込む方法を調べました。 最初は、SpringBootに組み込まれているObjectMapperで読み込めると思いましたが、ObjectMapperではCSV読み込みはできないようです。ですので、意図的にJacksonライブラリのCsvMapperを依存関係に含める必要があります…
皆さんはDBのユニットテストを行うとき、どのようにテストのセットアップを行っていますか。 私はSimpleJdbcInsertを使用しています。テーブル名とInsert対象のカラムと値のマップを渡すだけで更新してくれるので、個人的には使いやすいと思っています。 し…
タイトルの出オチ記事。 Windows環境でディレクトリを表現するときは、次の表現はすべて同じディレクトリを指します。 String path1 = "tmp\\dummy"; String path2 = "tmp" + File.separator + "dummy"; String path3 = "tmp/dummy"; Linux等の環境では、デ…
以前にControllerをテストする記事を書きました。しかし、SpringBootTestの使い方しか分からなかったので、WebMvcTestのやり方を理解していませんでした。 ですが、ToshiakiMaki@makingさんのサポートにより、なんとかWebMvcTestでのテストができるようにな…
既存のシステムが利用しているDBに相乗りしてアプリケーションを作ることがあります。 ユニットテストのためにDBマイグレーションできるFlywayは使いたいが、相乗りする本番環境DBは管理していないので余計なことはしたくない。 今回の記事では、SpringBoot…
仕事ではDBマイグレーションとしてFlywayを使用しています。ただ、表やテーブル等のDDLのみで、マスタデータ等のDMLは手動で管理していました。ですので、FlywayでDMLも管理することにしました。 しかし、そのまま適応してしまうと検証環境と本番環境のデー…
ローカルでプロファイルを指定してbootRunすることはあまりありませんが、地味に便利だったので記事にします。 なお、bootRunタスクに限らず他のタスクでも使用できます。 環境 gradle 6.7 Java 11 Spring Boot 2.3.5 RELEASE ゴール gradleのbootRun時のオ…
JavaでFTPを使ったアップロード機能を実装したので、未来の自分のため残しておきます。ダウンロード機能も簡単に実装できるようですが、仕事では扱わなかったので、必要なときにまた実装します。要望があったら頑張って書きます。 なお、ソースコードをガン…
タイトルだけで終わる出落ち記事。 30分引っかかったので、1時間で記事にして残す。 方法 ドット(.)は正規表現の特殊文字。 ですので、ドットをエスケープする必要がある。 String[] versions = "1.0.10".split("\\."); 本当にやりたかったこと Gitでmaste…
複数のスキーマがあるDBに対して、Flyway+Springでアクセスしようとしたときに半日くらい設定に苦労したので、メモとして残しておきます。 環境 Flyway 5.2.4 PostgreSQL 13 SpringBoot 2.3.5.RELEASE Java Java 11 YAML 設定方法 spring: datasource: drive…
きり丸アドベントカレンダー2020の24記事目です。 23日目の記事にて、RestOperationsインターフェースを使用して別システムのAPIを実行できるようにしました。23日目の状態では他システムのAPIを実行する直前にてインスタンスを生成していましたが、別の箇所…
きり丸アドベントカレンダー2020の23記事目です。 自システムのREST APIを作成するときには、@RestControllerを付与すれば簡単に実装できます。 今回はRestOperationsを使用して、別システムのAPIを実行します。 ゴール アプリケーションから別システムに対…
きり丸アドベントカレンダー2020の22記事目です。 バッチ処理等の定期的な実行を行うには、cronがあります。製品としては日立製作所のJP1、ソフトバンクのLoadstar Scheduler等があります。 Spring Bootの機能でも、定期実行できるSpring Scheduledが存在し…
きり丸アドベントカレンダー2020の21記事目です。 弊社の試験環境のシステムには、月跨ぎや年跨ぎのテストを行いやすいように業務日付という概念があります。処理日等の項目を業務日付に合わせて連携しないと、対向システムのバリデーション等にひっかかって…
きり丸アドベントカレンダー2020の20記事目です。 前回の記事でCSVのアップロード処理を書きました。逆に、CSVのダウンロード処理もできるとうれしいです。 ですので、今回の記事ではCSVダウンロードします。 ゴール CSVファイルをダウンロードする 環境 Jav…
きり丸アドベントカレンダー2020の19記事目です。 ToDoアプリケーションでは、CSVファイルをアップロードして一括で登録するような機能があると便利です。ですので、ファイルをアップロードする仕組みを作りましょう。 ゴール HTMLからJavaにファイルをアッ…
きり丸アドベントカレンダー2020の18記事目です。 RestControllerAdviseで共通的に例外をキャッチする方法をこちらの記事で紹介しました。 しかし、RestControllerAdviseは発生した例外をキャッチするのが役割で、例外を自作例外に翻訳することはこのクラス…
きり丸アドベントカレンダー2020の17記事目です。 エラーが発生した時に、共通的にExceptionをキャッチできると、フロントに返却するレスポンスのHttpStatusやBodyを共通化できます。その共通化にはRestControllerAdviseを使用します。 それぞれ適切なExcept…
きり丸アドベントカレンダー2020の16記事目です。 自システムのデータをREST APIで公開すると、非同期で処理ができるようになるのでフロントのシステムをSPAにできたりします。第三者にデータを提供することもできます。 ぜひ、REST APIでシステムを公開する…
きり丸アドベントカレンダー2020の15記事目です。 作成したアプリケーションを各環境にデプロイする際、2つの考え方があります。 各環境用に設定ファイルを書き換えてデプロイする 各環境用に複数の設定ファイルを用意し、デプロイ後に読み込む設定ファイル…
きり丸アドベントカレンダー2020の14記事目です。 アプリケーションは常に動いている必要があります。ただし、障害で動かなくなることもよくあります。動かなくなった場合には、早く気付けるようなしくみが必要です。その1つとして常に同じ値を返すAPIを用意…