【修正】オブジェクト間フィールドのコピー

先日の オブジェクト間フィールドのコピー - Oboe吹きプログラマの黙示録 を修正することにした。 それは、継承クラスにおいて継承元のフィールドをコピーすることを考慮すべきだからだ。 @Data @EqualsAndHashCode(callSuper=true) を書いているときのエン…

オブジェクト間フィールドのコピー

任意のオブジェクト間で、特定のフィールドだけをコピーするのに汎用的な方法を考えます。 これを考えるきっかけは、JUnit の assertEquals などを実行する前に、比較したくない属性フィールドは、 コピーして同じ値にしてしまおうという目的で、それを状況…

java.nio.file.Files の createDirectories

Files.createDirectory(Path path) は、path 生成元に存在しないディレクトリがあれば、 java.nio.file.FileAlreadyExistsException を発生するが、createDirectories なら、ディレクトリ作成できる権限、環境なら途中も生成 で作ってくれる。 try{ Path pat…

PostgreSQL で mySQL の last_insert_id() 相当をmybatis で実装したい

PostgreSQL の CURVAL() や、LASTVAL() で、シーケンスから求められるものではなく、 UUID のような型で Primary Key を構成するテーブル挿入直後のキーを取得したい。RETURNING を使う。insert文の次の書式 INSERT INTO テーブル VALUES (...) RETURNING PK…

MySQL last_insert_id() , PostgreSQL

SQL

PostgreSQL で MySQL の last_insert_id() と同様の機能、LASTVAL() (例) CREATE TABLE items ( id serial not null primary key, name varchar(128) not null ); 実行 INSERT INTO items (name) VALUES (‘Lemon’); SELECT LASTVAL(); でも、 www.postgres…

Java SHA256 の結果をどういう文字列にすべきか

Java SHA256 java.security.MessageDigest を使う場合結果として取得できる byte[] を、どういうHEX文字列にすべきか?String.format を使う手段もあるが、BigInteger の toString で16進を指定する手もある、 try{ byte[] hashbytes = MessageDigest.getI…

PostgreSQL conflict upsert のトリック

SQL

SELECT して存在しない時だけ、INSERT を行うという操作は、 2回のSQL実行文を流す=コードすることになる。PostgreSQL の CONFLICT の DO UPDATE の条件 WHERE句を 結果 False にすれば、すでにレコードが存在すれば、UPDATEが走らないことになる。よくクエ…

PostgreSQL constraint を書かない時の UPSERT

SQL

かなり昔、 oboe2uran.hatenablog.comを書いた。 constraint を書かない時の UPSERT、Primary Key しか書いていない時の UPSERT の書き方は、 前回の投稿のテーブルで、id が Primary Keyである場合、、、 前回の投稿 INSERT INTO sample (id, `point`, pric…

AWS Lambda タイムアウトの捕捉

AWS Lambda のタイムアウトをJava で作成するLambda関数に捕捉させる要件。 こういう要件、なんで Python で作らないんだという声は置いといて。。。 タイムアウトする Lambda は、ログ出力は、awslogs で CloudWatch で閲覧が可能という前提 Lambda のタイ…

AWS の Lambda関数のタイムアウトの最大時間、制限値

2018年の公式アナウンス aws.amazon.comこれしかないのか・・・15分って長いようで短い。。。

ReturnalConsumer の使いどころ

先日と同じことではあるが、、 Matcher の find() と group() (2) - Oboe吹きプログラマの黙示録ReturnalConsumer の使いどころとして、、 https://github.com/yipuran/yipuran-core/wiki#returnalconsumert String str = "aaa134_cd45_def"; String res =…

Matcher の find() と group() (2)

oboe2uran.hatenablog.comを書きましたが、Matcher だけにフォーカスすれば、 必ずマッチが約束されているなら、 Git-Hub にUPした https://github.com/yipuran/yipuran-core/wiki#returnalconsumert ReturnalConsumer を使って Pattern ptn = Pattern.compi…

Matcher の find() と group() (1)

java.util.regex.Matcher は、マッチをさせてから、一致部分を抽出というステップが 煩わしいと思っていた。例えばファイル名の一部が時刻文字列(yyyyMMddHHmmss)になっており、時刻まで求めるのに、 java.util.regex.Pattern 正規表現でマッチー>Matcher…

Maven package 実行のメモ

テストスキップしてパッケージ生成 mvn package -DskipTests=trueクリーンしてからパッケージ(よく使いそうな実行) mvn clean package -DskipTests=trueMaven プロジェクトーサブモジュール構成で、モジュールを指定する場合 書式は、、 mvn clean package…

JUnit static メソッドのmock

以前、書いていたが、、 JUnit4 でのモック - Oboe吹きプログラマの黙示録static メソッドのモック は、mockito-core だけでなく、mockito-inline も必要 <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>4.4.0</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mocki…</artifactid></dependency>

PushbackInputStream を使用する

以前、Excel 拡張子 (xls) (xlsx) 両方に対応した操作 Apache POI として、 oboe2uran.hatenablog.com を書いた。しかし、ファイルシステムによっては、Excel WorkBook の認識に、 Your InputStream was neither an OLE2 stream, nor an OOXML stream or you…

list chain execute

public static <T, R> R relayFunction(List<T> list, Function<T, R> first, BiFunction<T, R, R> func){ Iterator<T> it = list.iterator(); R r = it.hasNext() ? first.apply(it.next()) : null; while(it.hasNext()) { r = func.apply(it.next(), r); } return r; }</t></t,></t,></t></t,>

クォート文字で囲ってないJSONキー

JSONの仕様は、フィールド名:キー は、(") ダブルクォーテーションで囲むと されているが、RFC8259 にそんなこと書いてあるか? JavaScript 表記のことを考えると、キーをダブルクォーテーションで囲まないケースで 読込みエラーになるのは、不都合なのでは…

Iterator → Stream

稀に書くことがある Iterator から Stream への変換メモSpliterators.spliteratorUnknownSize で、イテレータを Spliterator を作って、 StreamSupport で Stream生成 Iterator<T> iterator =list.iterator(); サイズが解らない場合ケースが多いので、 Stream<T> s</t></t>…

リスト要素の前方を参照する処理(3)

oboe2uran.hatenablog.comこれを、先頭だけ Consumer にして、BiConsumer で if 文を書く必要をなくす。 public static <T> void eachPrevious(List<T> list, Consumer<T> first, BiConsumer<T, T> consumer){ ListIterator<T> it = list.listIterator(); first.accept(it.next</t></t,></t></t></t>…

リスト要素の前方を参照する処理(2)

前回の投稿、 oboe2uran.hatenablog.comさらに、BiConsumer の処理にしてみます。 public static <T> void eachPrevious(List<T> list, BiConsumer<T, T> consumer){ for(ListIterator<T> it = list.listIterator(); it.hasNext();) { T pre = null; if (it.hasPrevious()) </t></t,></t></t>…

リスト要素の前方を参照する処理(1)

特別に新しいことではない、Java標準で 1.6の時代からあることではあるが、 意外と正確に迅速に書けないロジック (課題)A, B. C,.... と文字列のリストが存在する。 これを、前の要素を参照しながら抽出処理する。ListIterator の hasPrevious() と previo…

Jackson Map デシリアライズ

JSON → Map import com.fasterxml.jackson.core.type.TypeReference; TypeReference を使って Map<String, Object> map = new ObjectMapper() .readValue(jsontxt, new TypeReference<LinkedHashMap<String, Object>>(){}); try(InputStream inst = new FileInputStream(Thread.currentThread().getContextC</linkedhashmap<string,></string,>…

AWS Lambda関数 Java イベントの認識

AWS Lambda関数 をJavaで構築する場合、イベントの認識はハンドラメソッドのガイドとして 次がある。 docs.aws.amazon.comいきなり Map<String, String> で受け取るハンドラメソッドの方法が書いてあります。 JSONなら、JSONとして受け取ったら直ぐに parse して処理したいも</string,>…

AWS EventBridge で、Javaで書いた Batch Job にパラメータを渡す。

AWS のナレッジを参考にするしかない。 https://aws.amazon.com/jp/premiumsupport/knowledge-center/batch-parameters-trigger-eventbridge/「準備:Job定義」 Javaで書いた Batch のイメージ作成済でAWS Job定義のジョブ設定を行う。 ”Ref”+”::"+{パラメ…

ローカルの置いた Jar をMavenでビルドの依存関係に追加する。

Maven セントラルリポジトリにない JAR 、あるいは外部サーバーのMavenリポジトリから取得できない JARをローカルPCに置いて、Maven でビルドの依存関係に追加する方法Maven の <build> <plugins> に、以下のように<plugin> を挿入すれば可能になる。例)poisample-0.0.1-SNAPSHOT.ja</plugin></plugins></build>…

AWS boto3 の Java版?!

AWS boto3 に触れたので、これと同じことをJava でやるには、、、 oboe2uran.hatenablog.comaws-java-sdk-batch aws.amazon.comよりも、、software.amazon.awssdk AWS SDK for Java 2.x の方が、インターフェースもそっくり。sdk.amazonaws.comDescribeJobsR…

AWS boto3 submit_job で実行する Batch Job のステータスを監視する

Batch — Boto3 Docs 1.21.3 documentation のドキュメントを頼りに、以下のような 1つの Job が動いて成功したら次の Job を実行する Lambdaを Pythonで書く。lambda_function.py のソースコード import logging import boto3 logger = logging.getLogger()…

guice で @PostConstruct

@PostConstruct , @PreDestroy などの JSR-250 Lifecycle annotation は、 これらを使ってちゃんと実装すべきなのだろうけど、 guice/extensions/jsr250 at master · mathieucarbou/guice · GitHub @PostConstruct だけ、簡単につかいたい。結構、古い断片の…

Spring での static DI

Google guice での static へのインジェクションは、割と簡単な方法であるのに対し、、、 static injection - Oboe吹きプログラマの黙示録 では、Springの場合は、、、 と調べると。。 www.baeldung.comcode injection - Spring: How to inject a value to s…