谷本 心 in せろ部屋

はてなダイアリーから引っ越してきました

Java

Spring Boot 3.0アプリケーションをGrafanaスタックで可視化してみた。

Spring Boot 3.0でMicrometer対応が強化されたとか、トレース情報を収集するSpring Cloud SleuthがMicrometerに入ったと聞き、この辺りはしばらく追いかけてなかったので、この機会にまとめて学び直すことにしました。 今回作ったものはGitHubに置いてありま…

Spring Bootのマルチモジュール構成でmvn spring-boot:runできなくて困った話。

こんにちは、絶対にmvn installしたくないマンのcero_tです。しばらくブログはお休みです的なことを言ってたのに、今日も長文を書いてしまいました。 背景 Mavenで(Gradleでも)開発する時にはだいたいマルチモジュール構成にすると思うのですが、Spring Bo…

Spring Data JDBCを拡張してみる その2 - アノテーションでクエリを受け取る

毎日のようにブログを書いていると、昨年の Dapr Advent Calendar を思い出しますね。とは言え、そろそろブログを毎日書くのもいったんキリがつきそうです。 やりたいこと 前回も書きましたが、ゴールを再確認しておきます。 Spring Data JDBCに機能追加して…

Spring Data JDBCを拡張してみる その1 - クエリを受け取れるメソッドを増やす

ここまでSpring Dataの自作を行ってきましたが、Spring DataやSpring Data JDBCの知識がついてきたおかげで、Spring Data JDBCそのものを拡張することもできそうだなと分かってきました。 元々あるものは再実装せずにそのまま使ったほうが良いに決まってるの…

独自Spring Dataを作ってみる その3 - SQLファイルを読んで実行する処理を作る

前回のエントリーで、findAllは無事に実行できたので、次は独自拡張として任意のSQLを実行することを目指します。 やりたいこと 先にゴールを明確にしておきます。 @SqlFile アノテーションで指定したSQLファイルを読んで実行できること @Query アノテーショ…

独自Spring Dataを作ってみる その2 - findAllを作る

前回のエントリーで自作Spring Dataの扉を開けましたので、今回は実際に全件検索、findAllが動くところまで進めてみます。 TL;DR このエントリーは長文すぎて誰も読まないと思うので、先にまとめておきます。 findAllだけ動く独自Spring Dataとサンプルアプ…

独自Spring Dataを作ってみる その1 - まずは入口

僕は約束を守る男なので、Spring Data SQLを作り始めたというお話です。 背景 これまでBootiful SQL TemplateというJdbcTemplateの薄いラッパーを(作って)使っていたのですが、INSERT文とかSELECT ALLくらいは自動生成して欲しいよなと思い、Spring Dataを…

SpringのWebClientのリトライ機能を試してみました。

試してみましたブログです。 背景 仕事で数秒おきにWebのリクエストをリトライするような機能が必要になり、数秒待つのにスレッドを消費させたくないのでどうしたもんかなと思ってたところ、SpringのWebClientが使っているReactorの機能にリトライがあり、こ…

Bootiful SQL Template 2.1.0でRecord対応をしました。

年に一回くらい、突然Javaの話をブログに書き始めるJava Championの @cero_t です。 数年前、「Spring BootでもSQLファイルを使いたいな」と思って勢いで作った Bootiful SQL Template ですが、何気に仕事で使うことがたまにあるので細々とメンテナンスを続…

100万件ぐらいのレコードを扱ったらOOMEが出た話。

要約 技術的な話だけ教えて、という方のために先に結論だけ書いておきますと、PostgreSQLはクエリを実行した時点で全レコードの情報を一気に読んできてヒープを埋めてしまう場合がある、ということ話です。 たとえば、ResultSet#nextメソッドを使いながら処…

Dapr + JavaでHello worldしました。

先日、MicrosoftがDaprというプロダクトをOSSで公開しました。 www.publickey1.jp Distributed Application Runtimeの略だそうで、なんかIstio的な感じなのかなーと思ったのですが「ステート管理」みたいな機能もある所が少し気になって、ドキュメントとかを…

GraalVM + Javaで作ったバイナリをAWS Lambdaで動かす時にハマった所

仕事でAWS Lambdaを使う機会が増えてきたのですが、やはり書き慣れたJavaでLambdaを書きたいなと思うことが少なくありません。ただAWS LambdaでJavaアプリを動かすと、初回アクセスに十秒近く掛かるし、メモリ消費量も大きいしで、パフォーマンス的にも運用…

ReactorでN+1問題な処理を実装してみた話

最近、格ゲーのツイートが増えてる [twitter:@cero_t] です。前のエントリーに書いた「18年ぶりに出る続編」のβテストがついに始まりまして、最近は夜な夜なコンボをやるなどしています。 シビアな反応が要求される格闘ゲームにおいて、継続して勝ち続けるた…

JMXで情報を取得する時のベンチマーク

JMHを使って、JMX経由でMBeanの情報を取る際のパフォーマンスを測定してみた。 ベンチマークのソースコードはこちら。 https://github.com/cero-t/Benchmarks/blob/master/src/main/java/ninja/cero/benchmark/JmxBenchmark.java ベンチマーク環境はMacBook …

なぜ僕はCaliperではなくJMHを選んだのか。

今日、会社のblogのほうにJMHのエントリーを書きました。 そう、今日のテーマはマイクロベンチマークです。 Javaのマイクロベンチマークツール「JMH」 - Taste of Tech Topics Javaのマイクロベンチマークに興味がある人は、 GoogleのCaliperというマイクロ…

定義的プログラミング

定義的プログラミングっていう言葉を思いついたから、メモしとく。 イメージ的にはこんなん。 Before: 普通の処理コード public Dto process(Map<String, String> input) { Dto dto = new Dto(); dto.userName = input.get("ユーザ名"); dto.password = input.get("パスワー</string,>…

JJUGナイトセミナー「from old Java to modern Java」

先日のJJUGナイトセミナーで 「from old Java to modern Java」という話をしてきました。 公式サイト : http://www.java-users.jp/?p=551 togetter : http://togetter.com/li/521481 Java以前のCライクな書き方から、J2SE 1.4、5.0・・・からJava SE 8まで …

若作りするためのJavaコード

このエントリーは Java Advent Calendar 2012 の10日目として書きました。 なんか色々あって、公開が2日ぐらい遅れてしまってごめんなさい(><) 前日は、Hideki Kishida (@quicy) さんの「Xtend の Lambda とストリーム処理」です。 http://legacy-style.…

Indyが早くないので、教えてください!

会社の同僚が、リフレクションと普通のメソッド呼び出しについて、 簡単なベンチマークを取って比較していました。 で、結果は以下の通り。 reflection :time(ms)=19054 direct call:time(ms)=44 リフレクションって、どれくらい遅くなるの? - snuffkinの遊…

volatileとか使うなと怒られた話

JJUG Night Seminar ~ Java VM&LT&納涼会 ~ http://kokucheese.com/event/index/48437/ に参加してきました。 「スタックマシンとしてのJavaVM」なんて言う 一見さんお断りみたいなタイトルに集まった人たちはもちろんレベルが高く 参加者のjavap経験率が20%…

自社の内々定者が書いたJavaOneレポートがなかなか・・・

自社の内々定者(来年、就職予定)がJavaOneに参加していたのですが その参加レポートが、なかなか良い感じの内容だったので紹介しておきます。 http://www.acroquest.co.jp/member/naitei2013/activities/ 等身大の学生として、分からない所は分からないと…

JavaOne Tokyo 2012でトラシューについて話してきました。

先日、7年ぶりに開催されたJavaOne Tokyo 2012で、 トラブルシューティングについて講演してきました。 「トラブルシューターの頭の中身 〜7年間のJavaトラブルシュートサービスから」 というタイトルで、 同期入社の江里口と掛け合い(漫才)風のセッション…

いいから聞け! 俺が文字コードについて教えてやるよ Advent Calendar 特別編

長らく更新の止まっている「いいから俺文字コード」シリーズですが、 このたび、Java Advent Calendarの一環として復活させました! Java Advent Calendarって? 本エントリーはJava Advent Calendarの5日目です。 Java Advent Calendarについては、以下のサ…

教えてエラい人!

Glassfish 3.1でCDI(Weld)を使う時に、Interceptorを仕掛ける対象を アノテーションではなく命名規約で指定することはできませんか? Seasarで言うところのComponentAutoRegister + addClassPatterや、 GuiceのAbstract#bindInterceptorで実現していたこと…

KotlinのFAQだけ翻訳してみた。

JetBrainsのJVM言語「Kotlin」のドキュメントのFAQだけ翻訳してみました。 http://confluence.jetbrains.net/display/Kotlin/FAQ 多少意訳してたり、勝手に段落分けをしている所もあり原文ままとは言えませんが、 訳が漏れている箇所や誤訳などについて、ぜ…

Kotlinかわいいよ、Kotlin。NBJLになるんじゃない?

7/19〜21にサンタクララのOracleオフィスで JVM Language Summitというイベントが開催されていました。 http://openjdk.java.net/projects/mlvm/jvmlangsummit/ そこで発表された、JetBrainsのKotlinというJVM言語が、かなりイイ感じです。 http://www.wiki.…

いいから聞け! 俺が文字コードについて教えてやるよ その2(Javaの文字コード編)

前回のエントリーでは「Java関係ないやん」的なツッコミも受けましたが、 今回からは、Javaを前提にしていきます。 Javaで文字から文字コードを作る 新人くん「Javaで文字から文字コードを作りたいんですが、どうすれば良いんですか?」 先輩社員「getBytes…

いいから聞け! 俺が文字コードについて教えてやるよ その1(前提知識編)

ちょっと久々のJavaネタですが、 前から書き溜めていた、文字コードやエンコードについてのノウハウを書きます。 今回は、詳細な説明に入る前に、前提になる知識や用語について説明しておきます。 文字コードとエンコードって違うの? 新人くん「では、HTML…

VelocityでStringをテンプレートとして読む時のパフォーマンス。

Apache Velocityで、テンプレートファイルを利用せずに、 Stringをテンプレートとして利用する方法を確認した。 方法1) Velocity#evaluateを使う。 Velocity.evaluate(new VelocityContext(map), writer, "test", templateString); 第四引数のtemplateString…

ピッチャーでコーラ。

先週末は、「Javaクラウドミーティング2010関西」が開催され、 皆さん、主にGoogle App Engineなどについて話される中、 私は「今さら聞けないJavaとクラウド」という内容でお話をしました。 実はちょっと体調が悪かったので、自分のセッションが終わった後…