`github.com/prometheus/client_golang` を使って 99.9 percentileでのHTTPハンドラのメトリクスを取ってみる

github.com/prometheus/client_golang でメトリクスを取る この記事はGoアドベントカレンダー向けの記事です。 この記事では github.com/prometheus/client_golang を使って 基本的なメトリクスを取ると同時に、HTTPハンドラのメトリクスを追加してみます。 …

Spring 5.0/Spring Boot 2.0にしたらMockMvcを使ったテストが406 Not Acceptableを返してくる話

Content-Type周りの挙動で死んでしまった回 使っているSpringは5.1.0、Spring Bootは2.0.6です。 元はこんなコード。 @Before public void setUp() { this.mockMvc = MockMvcBuilders.standaloneSetup(controller) .setMessageConverters(httpMessageConvert…

Spring Boot 1.5.x を使っているプロジェクトでSpring Bootを2系にしたら @Scheduledが動かないことがある

Spring Boot 1.5.xでは動いていた @Scheduledをつけた定期処理が Spring Boot 2.xでは動かないことがあります。 EnableSchedulingを自分のアプリケーションのConfigurationクラスにつけてください。 どこにもつけてないんだと思います。 ちょっとハマったよ…

Jackson 2.9からupdateValue/readerForUpdatingでデータのマージがされる

こんにちは。紅葉の季節ですね。 最近寒くて辛い。Spring Bootのアップデートもうまくいってなくて辛い。 今日も今日とて、アップデートでハマったメモを書きます。 ObjectMapper#readerForUpdatingを使っているあなた。気をつけましょう。 あるキーに対して…

Caffeineでキャッシュのエントリのキャッシュ有効時間に揺らぎを入れる方法

こんにちは。今日はCaffeineでキャッシュのエントリに対して キャッシュ有効時間に対してランダムな揺らぎを導入する方法をここに書いておきます。 キャッシュに対してランダムな揺らぎを入れる必要性に関してはこちらの記事を読むと一部書いてあると思いま…

reactor-logbackを試した。+ LMAX Disruptorの Technical Paperを読んだメモ

以下のモジュールを試した。 reactor-addons/reactor-logback at master · reactor/reactor-addons · GitHub Reactor LogbackはLMAX Disruptorの上に作られたReactorのアドオンだ。 このモジュールはアプリケーションのための高速で非同期なロギングの機能を…

SpringfoxはComponentScanを利用しているので spring-context-indexerでComponentのindexをすることは出来ない

出来ない。 理由はタイトルに書いた通り、springfox (現在最新 2.9.2) ではComponentScanを利用している。 なぜか spring-context-indexerを有効にする際は、ComponentScanを利用しているjarが全て対応していないといけない。 じゃあどうするか。 indexerでi…

MySQLのReplicationDriverとHikariCPは組み合わせて使えない

Tomcat DBCPを使いましょう、ということらしいです。(他のDBCPはどうなんだろう。) Can I use hikariCP with ReplicationDriver? · Issue #1123 · brettwooldridge/HikariCP · GitHub Problems with MySQL master/slave allowMasterDownConnections · Issu…

Spring Boot2系からStringをRestControllerで返している場合にデフォルトのContent-Typeが変わってしまった話

変わってしまった。 これは特殊な条件下によって起きる。 どのようなコードだったか @RestController public class MyController { @GetMapping public ResponseEntity<String> get() { return ResponseEntity.ok("Hello World"); } } どうなったか 手元のSpring Boo</string>…

Jackson 2.9から空文字列をobjectMapper.readTreeするとnullが帰ってくる

タイトル通りです。 Spring Bootのバージョンアップ中に発覚しました。 以下のようなコードです。 @Test public void test() throws IOException { JsonNode node = new ObjectMapper().readTree(""); // 2.8だと例外が出る assertThat(node).isNull(); // 2…

Webサーバを作りながら学んでいる

初めに 少し素振りにScalaを書いている。 タイトル通りだが、以下の本を読みながら書いている。 Webサーバを作りながら学ぶ 基礎からのWebアプリケーション開発入門 まだまだ序盤だが なかなか丁寧に解説されているのと 実験ベースでゆっくり進んでいく。 最…

Byte BuddyのAdvice APIを触ってみる

はじめに 前回から色々と触ってきた Byte Buddyというライブラリですが、自分の頭の整理のために ここに簡単にまとめておく。 Byte Buddyはバイトコード操作用のライブラリがあり その中にAdviceというAPIが存在する。 このAPIでは、メソッドの先頭や最後に…

バイトコード操作でロギング処理を追加する

はじめに 前回はただフィールドを追加するだけのコードを書きました。 なんのひねりもありません。 progret.hatenadiary.com そして今回はメソッドの最初と最後にロギング処理を追加します。 今回は簡単化のため、標準出力に出力します。 今回の記事ではJava…

バイトコード操作でフィールドの追加をする

バイトコード操作を使って 本記事では、フィールドを追加してみます。 対象クラスをAfterのような形に操作してみます。 (テストではstaticな内部クラス) // Before class Some{} // After class Some{ private String foo; } Javassistでフィールドを追加…

ラムダ式、完全マスターした。

今日はここのところずっと調べていたラムダ式、およびメソッド参照について調べていましたので それをこの記事でまとめたいと思います。 まずはじめに。 ここに、テストコードを含む、ラムダ式およびその他のコードをあわせた、3種類のコードを用意した。 も…

MethodHandlesで遊ぶ

初めに 今回出てくるのはこの辺 MethodHandles (Java Platform SE 8) MethodType (Java Platform SE 8) MethodHandle (Java Platform SE 8) MethodHandles.Lookup (Java Platform SE 8) MethodHandleの朝はLookupオブジェクトを作ることから始まる。 Lookup …

無限にTODOアプリを作っていき

今回はReact+TypeScript+Spring Bootで書いてみる。 フロントエンド構成 TypeScript React Webpack Jest (一応入れたけど、習熟度が足りず画面のIFがガンガンぶっ壊れるから現状テスト書いてない) bulma (CSSフレームワーク, そういえばhack使ってみたかっ…

TypeScriptでモデルの型定義を良い感じに管理したい。

効率良くTypeScriptでドメインモデルの型定義を管理したい。 例えばここに、以下のようなツイッターのような投稿を模したモデルがあるとする。 type Post = { id: number, content: string }; ふむ。特筆すべきものはない。 ではこれをモジュールとして型だ…

curlでログインしてAPIを叩く

Spring Bootで作った認証で保護されているAPIを叩く。 ログインページに入って、セッションを確立する -c オプションでクッキーを保存する。 $ > curl -c my.cookie http://localhost:8080/login 以下みたいなクッキー(のファイル)ができるのでcatで確認 $…

Spring Security入門した

はじめに 今回の記事では以下の実装を行ったのでメモ書きとして残しておきます。 EclipseでのSpring Loadedを使ったHot Swap Thymeleaf3とSpring Securityによるフォーム認証 EclipseでのSpring Loadedを使ったHot Swap 公式に見にいくとIDEAしか書いてませ…

TypeScriptとjestでカバレッジを取る

前置き この記事は下記の記事を補足する形で書いていきます。 React + TypeScriptでjestを使ったテストをする - かずきのBlog@hatena この記事で行うのはTypeScriptのテストを行って、jestでカバレッジを取るまでです。 足回り まずはtsconfig.jsonです。と…

TypeScript環境でnycとtapeを使って、カバレッジを取るテスト環境を整える。

初めはavaを使おうと思ってたんです。 下記の説明を見たところコンパイルしてからやってね、みたいな形になっています。 github.com github.com avaはmagic-assertを使っており、jsに対してassertの表示を見やすくするための処理が入ってるはずです。 そのた…

アノテーションを体が欲している:NotNull:NotNull:NotNull

みんなだいすきアノテーション みんな大嫌いアノテーション あの手この手でアノテーション というわけでNotNullアノテーションが付けられたメソッドを バイトコード操作する話です。 NotNull制約をアノテーションだけで実現します。 似たような仕組みはCheck…

JavaFX入門した

やる気ない感じでJavaFXを軽く触ることにした。ごらんの有様だよ!!ドラッグ・アンド・ドロップしたファイル(.jar or .class)をデコンパイルします。 ドラッグ・アンド・ドロップしたファイルと同じディレクトリにdecompiledというフォルダを作成し そこに…

Spring Messaging でのWebSocketメモ

Spring MessagingでのSTOMPは以下の形で設定を行う。 これがなぜ動くのかを軽く探ってみたのでメモとして残しておく。 普通にSpringでWebsocketを使いたいならリファレンスのここ見ればよいかと。 なぜこのリファレンスにあるソースが動くのかを大まかに調べ…

Spring入門した。

遅まきながらSpringを入門した時のメモを書きます。 Spring Bootではありません。 経緯 WebScoketやりたい。 Spring使ってみよう。 Spring WebScoketあるじゃん使おう。 Spring Messagingの連携良さそう。 Stomp、SockJS?よく分かりません。(socket.ioがい…

新卒2年目のエンジニアの自分がやっている、心掛けていること

初めに こんばんは。初めましての方は初めましてかもしれません。少し新年明けて思うところがあったので書いてみます。 ネガティブな話はできるだけ避けて。まず、自分の素性を軽く説明しておきます。新卒で小さいSIerに就職しました。 今は現場に常駐して作…

Proxyの生成手法を素振りしてみる。

最初に さて、タイトルどおりなのですが 素振りするだけの記事だったりします。素振りしたライブラリはこちら Javassist cglib Byte Buddy Proxyと言えばjava.lang.reflect.Proxyですね。今回は次の2つのクラスについて、Proxyを作ってみます。 public stati…

Pluggable Annotation Processor APIでimport文を取る

APT、Pluggable Annotation Processorは皆さんお使いでしょうか。タイトルの通りですが、APTでimport文を取ってみます。gradleはとりあえずこんな感じです。 今回はAPTのProcessorを作るプロジェクトですがAPTを使います(グルグル目) 準備 apply plugin: '…

Vue.js 2.1 with TypeScript 2.1 on Payara Micro

この記事はPayara Advent Calendar 2016の21日目の記事です。この記事はPayara MicroといいつつPayara Microの話はあんまりありません。 Payara Microの細かい話は蓮沼さんが書いていらっしゃるので、そちらをご覧頂ければと思います。この記事には何ら説明…