2022-01-01から1年間の記事一覧

厳格な日付読み取りで良い方法は。。

存在しない日付の読み取り String strdate = "20230931"; LocalDate dt = LocalDate.parse(strdate, DateTimeFormatter.ofPattern("yyyyMMdd")); 2023-09-30まあ、これは想定される好ましくない方法 DateTimeFormatter に、ResolverStyle.LENIENT を指定する…

JUnit の mockito thenAnswer を lambda で

先日書いた、 JUnit mockito の return を遅らせたい(時間を掛けたい) - Oboe吹きプログラマの黙示録よく考えたら thenAnswer は、lambda で書けましたね。。 Mockito.when(foo.getAgent(Mockito.contains("a"))).thenAnswer(new Answer<String>() { @Override pub</string>…

JUnit mockito の return を遅らせたい(時間を掛けたい)

変なテスト要求仕様であるし、こんなこと通常しないかもしれないが、リターン値を when で書くメソッドの引数の条件以外の条件で分岐させる時に応用できるかもしれない。通常、String 1個の引数メソッドのモック Mockito.when(テスト対象Class.メソッド(Mock…

JUnit 実行用の log4j2 設定を指定する

JUnit テストケースコードで、log4j2 の log4j.configurationFile 属性を書きかえれば良い。 以前、 oboe2uran.hatenablog.com を書いて悩んだが、 開発 IDE を Eclipseを使っているのであれば、、 test/resources/ の下に、JUnit で実行する時のための log4…

JUnit で、実行中のメソッド名を取得

JUnit で、@Before 付与したテストケースの前に動くメソッド内で、 これからテスト実行するテストケースメソッド名を取得する。JUnit で、@After付与したテストケースの後に動くメソッド内で、 テスト実行したテストケースメソッド名を取得する。 という場合…

スレッドプールの状況

先日書いたサンプル、 oboe2uran.hatenablog.com のようなケースで、待ち合わせ時にスレッドプールがどういう状況かを知りたい場合がある。単純であるが、Executors.newFixedThreadPool で作成したものを ThreadPoolExecutor でキャストすれば良い。 ThreadP…

JMockito を使う場合の注意

JUnit のモックは、org.mockito を使うことが多いのであろうか。 mockito-core と、mockito-inline を Maven pom.xml で依存関係を指定して使ったりする。 Mockito.when(~メソッド実行).thenReturn(リターン値); などを良く書いていたものだ。JMockito の書…

CompletableFuture を使って生成した複数スレッドを待ち合わせる。

Runnbale のタスクと Future のタスク、それぞれのサンプルコードを書いてみた。 以下、どちらもそうなのだが、 CompletableFuture の allOf メソッドが可変長引数で、リスト等のコレクションを指定できないので、 しかたなく、toArray(CompletableFuture[]:…

Docker複数イメージを1つのイメージに、

ネット検索するといろいろと出てくると思うが、要は、Docker ファイルの記述で、COPY --from=0 転送元 .あるいは、FROM as で名称を付けた名前でCOPY --from=名前 転送元 . を書くことである。 具体的に、Docker ファイルを、、 FROM amazoncorretto:11 as j…

Java からシェルを実行

昔、Process を作成して動かすものを、yipuran-core に載せてあるが、近々、削除して 書き直そうと思っている。 以下のように、標準出力も標準エラー出力も区別なく結果として取得した方が 良いのではないかと。。。 public class ScriptExecutor{ private M…

例外捕捉で原因を掘り下げて処理をする場合

Throwable の getCause() で null にならないまで参照していく方法になり、 ネット検索すると腐るほどサンプルコードが出てくるだろう。。 while ループを良く見かけるが、個人的には、for文ループの方が良いと思っている。 }catch(Exception e){ for(Throwa…

AWS Batch をJavaプログラムから起動

AWS SDK for Java を使う <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-batch</artifactId> <version>1.12.295</version> </dependency> AWSBatchClientBuilder で AWSBatch クライアントを生成する。 SubmitJobRequest JOBリクエストとして、JOB送信名、JOBキュー、JOB定義名を指定して用意し AWSBatch クライアントで、…

Jackson @JsonProperty による必須チェック

Jackson による JSON → Java Objectで、JSON 側に対象フィールドキーが存在しない時 エラーにする方法、 @JsonProperty(required=true) を付ければ良いと思っていた。。。 import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; @Data…

Thread.sleep は精度低いから使わないのだけど、、

それでも、これしかないという時の為に、、、 public static Consumer<Integer> sleepSecApprox(long precision){ return t->{ LocalDateTime tc = LocalDateTime.now().plusSeconds(t); while(tc.compareTo(LocalDateTime.now()) > 0){ try{ Thread.sleep(precision)</integer>…

AWS Java SDK で Job起動の時に必要な Role

AWS Batch Jobを するとき、必要な権限、 aws.amazon.com でやろうとしていたのですが、 必要な Role 権限がなかなか解らなくて苦労しました。AWSBatchServiceEvenyTargetRoleだそうです。 { "Version": "2012-10-17", "Statement": [ { "Eggect": "Allow", …

Excel 指数表記と Apache POI

Excel で、8桁を超える数値を指数表記ではなく、そのまま8桁で格納、 これを Apache POI で読み込むと、 org.apache.poi.ss.usermodel.Cell は、 toString() では、指数表記になる。 10000000 → 1.0E7 つまり、double 型を toString() した場合と同じ。Apa…

Java でTupleが欲しい時、、、

https://blogs.oracle.com/otnjp/post/records-come-to-java-ja Java14 で導入された「レコード」の性質が名前付きタプルの側面を持っていることを考えると せめて Java11 にTuple が作れるようになっていて欲しかった。Lombok で、システム内で作るしかない…

Maven プロファイル指定ビルドと、生成物の名前

Maven profile を使用してビルド対象リソース管理しているプロジェクトで ビルドする JAR名も合わせて変更したい。という要求通常デフォルトのMaven がビルドするJAR は、artifactId 名 + "-" +バージョン番号 + ".jar" という書式で JARファイルが作成さ…

bash 正規表現など

マッチした部分の抽出 #!/bin/bash item="recty-8.10.12" if [[ ${item} =~ ([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then echo '${BASH_REMATCH}='"${BASH_REMATCH}" echo '${BASH_REMATCH[0]}='"${BASH_REMATCH[0]}" echo '${BASH_REMATCH[1]}='"${BASH_REMATCH…

AWS Batch Job 実行 シェルの終了コード

AWS Batch Job 実行のシェル(bash) で シェルの終了コードがそのまま、Job ステータスに適用される。 exit 0で終了すれば、SUCCEEDED exit 1で終了すれば、FAILED になる

JSONテキストを変数にする

bash のスクリプトを書いていて、変数にJSONテキストを入れたい。サンプル シングルクォートで括って、、 #!/bin/bash name="orange" msg='{ "count": 12, "item" : "'$name'" }' echo $msgJSONの中で変数をセットするのが良い書き方に思えない。 echo の結…

入れ子の bash コマンド実行結果の代入

bash コマンド実行結果を変数に代入する場合、「`」逆クォーテーションで囲むか、 $( ) で囲むかであるが、入れ子が発生する場合をどう書くか? まず、入れ子にしないケース 1970-1-1 00:00:00 からの秒数、所謂エポック秒を date コマンドで求めた変数を Pe…

Windows Subsystem for Linux でWindows側のドライブ

Windows Subsystem for Linux (WSL)をインストールして ターミナルを立ち上げると、Windowsの Cドライブは既にマウントされている。次のように、cd で移動すれば、Cドライブアクセス可能 $ cd /mnt/c/

Windows Subsystem for Linux で使う vi

1種類の Linux でしか試してないので vi の見た目が本当に使いにくいかどうか? 筆者は、WSL デフォルトの Ubuntu を入れてみて、vi でファイルを開いた時に、 ・文字色配色コントラストが酷い ・1行目に #!/bin/bash と書いても、真っ黒のままで背景色と…

ATOMシステム規定のアプリで開くが動作しない、対処

ATOM以前より使っていたプラグイン、最近のATOM 1.60.0 で、前にも入れて使ったことのある oboe2uran.hatenablog.com この、open-unsupported-files を入れて、 Excel をダブルクリックで Excel アプリで開けずに、エラー Uncaught TypeError: shell.openIte…

guice タイプセーフな annotatedWith

Google guice で JSR330 の @Named に対して、 バインド定義で @Namedアノテーションがついていることを限定する場合、 binder().bind(Logic.class).annotatedWith(Names.named("HIGH")).to(HighLogic.class); と、com.google.inject.name.Names の named(…

OGNL式、インナークラスの場合

先日、 oboe2uran.hatenablog.com を書きましたが、 滅多にないというかそんなクラス定義をして何の意味があるのだと思うが、、 インナークラスで定数を定義している場合、、 $でインナークラスを指定することになる。前回のサンプルを例にすると、、 packa…

bind定義を書かないでクラスに @Injectをした時の guice

通常 Google guice の使い方は、インターフェースに対する実装クラスのインスタンスが 割り当てられるように bind定義を書いてDIを実装する。うっかりというか、諸事情で見落として、 @Inject private Foo foo; と書いた Fooクラスが、インターフェースで…

継承時のlombok @Data

継承があるオブジェクトでは、@Data を使うと警告 Generating equals/hashCode implementation but without a call to superclass, even though this class does not extend java.lang.Object. If this is intentional, add '@EqualsAndHashCode(callSuper=f…

Markdown 表を書くのに便利なサイト

時々、使わせてもらってます。www.tablesgenerator.com