日々常々

ふつうのプログラマがあたりまえにしたいこと。

Java

ThreadContextやMDCはremoveせずにcloseしよう

新くもなんともない話です。当たり前と思う人には昔から当たり前(昔度合いはおまけ3を参照)。でも知らないことは悪ではないし、そうなんだーってなればいいだけの話。 一連のログに同じ値を付与したい時、 MDC (SLF4J) や ThreadContext (Log4j2) を使う…

SpringBootでAsyncを使う時に知っておきたいExecutorのこと

SpringFramework 6.0.11 SpringBoot 3.1.2 @Async と @EnableAsync の使い方 SpringFrameworkで @Async を使うとかんたんにメソッドを非同期で実行できます。 @Component class AsyncComponent { @Async void method() { // 時間のかかる処理 } } 使う側は単…

Javaのバージョンの取り扱い(2023年6月)

ツイート したらそれなりに反応があったので、少し丁寧に書いておこうかなと。 水物な内容なので、自動でつく投稿日時以外にもタイトルに「2023年6月」を入れて強調しておきます。 しょーとあんさー よくわかんないならJava17にしておきましょう。 前提 ツイ…

ローカルでSonarQubeを触ってみる(MavenとJaCoCoと)

SonarQube 9.9.1-community Maven 3.9.1 これはなに SonarQubeよくわからん人向け。 「何できるもんなんだろ」とか「現場でSonarQube使ってるものの、設定とか影響範囲わからなくて怖い」とか、色々とあると思う。ローカルでいじくれるとイメージも湧きやす…

3月末のSpringFrameworkのRCEを紐解いてみる

https://spring.io/blog/2022/03/31/spring-framework-rce-early-announcement Spring Shell がかわいそうなのでSpring4Shellって呼び方はしてほしくないなーと。でもCVEの番号なんて覚えれないので、通称は欲しい。この名前で広まっちゃったから検索に使っ…

Log4j 2のバージョンアップのやりかた

「Log4j 2に脆弱性があるらしい、バージョンアップしたら治るらしい。」 本日話題のこのテーマで軽く書いておきます。 未完です。 未完公開の言い訳。更新した内容は最後に書いてます。大きな間違いは(今のとこ)ないので、よかった。 2021-12-20追記: 2.17…

JUnitのNestedなMethodSourceの注意点

JUnit 5.8.1 Java 17.0.1 IntelliJ IDEA 2021.2.3 JUnit5での @MethodSource のおさらい JUnit5にはパラメタライズドテスト用の @ParameterizedTest があり、様々な方法でパラメーターを与えられます。 その中でもパラメーターにある程度柔軟性が欲しい場合…

ローカルクラスとしてrecordを使う

irof.hateblo.jp こちらで書いた「Local record classes」を使う時の注意。 触ってると案外使う機会が出てきそうな感触があったので、気をつけるところを書いておきます。 ローカルクラス そもそもローカルクラスってあまり使わないものなんで存在も認識され…

recordのネスト、ついでに他も

record Outer(int a) { record Nest(int b) { } } こんなことしたらどうなるんだろうと気になりまして。 record が単にクラスのシンタックスシュガーであれば、NestはインナークラスになるのでOuterのインスタンス変数、ここでは a にアクセスできるんですが…

IntelliJ IDEAで複数のクラスをマージする

IntelliJ IDEA 2021.2.3 値オブジェクトなクラスを呼吸をするように作っていると「あれ、これ同じじゃ?」となることがたまにあります。 使用箇所が少なければ手作業でマージしてもいいのですが、多くの箇所で使っているクラスだと大変。 文字列の一括置換で…

Recordを使ってく上で気にしとくこと

Java16で導入されたRecordですが、Java17リリースによりこれから一気に使われていくことかと思います。 Java17雑感で「データクラスを新しく作るならRecordを使ってみる」とか書いたんで「よしRecordを使おう!……ところで何気にしなきゃなんだっけ?」な私向…

開発環境のJDKセットアップ

最近「どこどこのサイトからダウンロード」とかしてないなぁ、と思ったので。 IntelliJ IDEA Community Edition 2021.2.2 SDKMAN 5.12.4 macOS(メイン) SDKMAN!にお任せ。 IntelliJ IDEAからはAdd JDKで ~/.sdkman/candidates/java に入ってるのの主だった…

Java17雑感

LTSとなるJava17が出ました。組織が今後もJavaを使っていけるかの試金石になるバージョンだと思います。 実際のとこLTSだから特別安定してるとかそんなことはないと思うし、6バージョン(3年)ごとにLTSにするってのもたぶんOracleさんが言ってみただけで、…

Springのドキュメントの探し方

私のね。 三行で Single page HTML でページ内検索する。 Googleでは site:https://docs.spring.io/spring-boot/docs/current/ を検索条件に含める。 GitHubの spring-projects で in this organization で検索する。 蛇足 該当ツイート、発端はbouzuyaさん…

Apache POIのバージョンあげたらサイズ跳ね上がったので調べたログ

2023-03-04追記: Apache POI 5.1.0で解消しているのでご安心ください。 Apache POI 5.1.0出てた - 日々常々 Apache POI の久々のメジャーバージョンアップである 5.0.0 が 2021-01-20 に出ました。 テストも通るしいっかーと、雑に更新したらexecutable jar…

SpringBootアプリケーションのProfileで制御したいとき

Short Answer @Profile でBeanを変える どうしても評価するなら Environment#acceptsProfiles(Profiles) を使う 文字列では読まない 文字列では読まない 文字列では読まない 説明 Spring Boot : 2.4.1, Spring Framework: 5.3.2 SpringBootではProfileを使っ…

SpringBootのプロジェクトを作成する

2020-12-29 時点で私がどうやっているかって言うの。 色々やり方あるし、他でも書いた記憶あるけど、現時点のスナップショットを書いておきます。 必要なもの 以下が実行できること curl gradle 私は SDKMAN で入れてます gradle の実行にJDKいるけど、JDKは…

SpringBootのちょっとした動きを確認するサンプルを作ろうと思ってから公開までにやったこと

開始の mkdir : 2020-09-19T19:15:24 公開の git push : 2020-09-19T19:20:53 予想は5分くらいだったので、29秒オーバー……1割以内だからセーフ。 きっかけ 普段Spring使わない@chiroitoさんがSpringBootつかってJITコンパイルを見てくれてるので、なんか助け…

自分のための道具作りのすすめ

【オンライン】 JJUGナイトセミナー「おうちで!ビール片手にLT大会!」8/26(水) 開催 でLTしてきました。 オンラインLTは難しいですね。 内容 いつも通り目新しいこともない「ふつう」の話です。 元々40分くらいのセッションを煮詰めて5分に押し込みました…

Javaのいまを知る「みんなのJava」を読みました #minjava

本日 2020-03-13 発売です! みんなのJava OpenJDKから始まる大変革期!作者:きしだ なおき,吉田 真也,山田 貴裕,蓮沼 賢志,阪田 浩一,前多 賢太郎発売日: 2020/03/13メディア: 単行本(ソフトカバー) 著者の一人である @jyukutyo さんから献本いただきまし…

finalを付けるのをやめてみた

2024-06-12 追記: 書いた内容自体はそうなんだけど、なんだかんだで `final` 書くほうがいいやってなってます ほら、「やめてみた」なんで。ほら。 Javaの話ね。バージョンは8以降の実質的final(effectively final)があるものとします。7以前は匿名クラス…

配列引数と可変長引数のクラスファイルでの違い

明日の関ジャバの資料作ってたら気になったので。(全く関係ない) javac 11.0.4 可変長引数のメソッドを持つVaragsクラスとそれを呼び出すInvokerクラスがあってさ。 class Varargs { static void methodX(Object... args) {} static void methodY(Object[]…

SpringBootでのRestTemplateのタイムアウト設定

spring-boot:2.1.7.RELEASE spring-web:5.1.9.RELEASE Short Answer RestTemplateBuilder restTemplateBuilder = ... RestTemplate restTemplate = restTemplateBuilder .setConnectTimeout(Duration.ofSeconds(3)) .setReadTimeout(Duration.ofSeconds(3)) …

nullが嫌い

消したつももりだった下書きが残ってたっぽいので公開しちゃう。なお2015-05-10に書いたもののようです。当時のブログを見ると、Optionalでなんか盛り上がった頃みたい。 ということで以下は編集せずそのまま投稿ー。 前置き nullを安易に使わない 派生のポ…

ArrayListじゃなくListを使うという話

具象型ではなく抽象型で扱え、インタフェースを使え、みたいなお話に対して。 前置き Javaの話。他の言語だと話は変わります。 「こうするのが絶対的に正解」と言うものではありません。私の現在の選択の説明です。明日になったら違うこと言ってるかも。 主…

JavaBeansって言葉に煩わされない

JavaBeansって言葉を目にして、ふと検索してみたらあまりに酷かったので書いておこうかと。対象は「JavaBeansってなんだろ?」と思ってしまった初学者さん。でもそんな人って私のブログ読むんだろうか…… 今後は「このエントリ参照」にするつもりで書いてみる…

どこでモックを使おうか

モッククラスを使うべきか否か から一歩踏み出してみましょう。 モックを使う選択をした。そこはゴールではありません。 お題 RestTemplate を使用して外部サービスを呼び出す場合を考えてください。 ここでの「外部サービス」はネットワーク越しにアクセス…

モッククラスを使うべきか否か

元ネタ: モッククラス、下から見るか?横から見るか? モッククラスを使うべきか否か、というネタを拾ったので書いてみます。これまでにモックについて殆ど書いてないことに気づいて驚きつつ。 Short Answer 「モックに何をさせたいの?」 質問に質問で返す…

Javaエンジニアからみた最近のJava事情

5/9(水) 大正GeekNight Vol.1で話しました。 https://taisho-geek.connpass.com/event/85508/ 4ヶ月前のスライドです。 Javaのサポートについては続報も出てきていますし、思い込みで騒がないのが吉です。 いよいよ今月本命のJava11がリリースですね。どうな…

「あるエンジニアがプログラムを紡いでいく様を見てみる」ライブコーディング・リプレイ

あるエンジニアがプログラムを紡いでいく様を見てみるでしたライブコーディングで言ったことや言わなかったことを書いてみます。 意識してるのは「コードをどまんなかに」です。 speakerdeck.com ……あ、このスライドのブログ書き忘れてた。 スライド中の「え…