RestTemplateBuilderに関する覚書


RestTemplateBuilder

  • RestTemplate は Spring Framework(spring-web)だけれども RestTemplateBuilder は Spring Boot。
  • Java の世界の なんちゃらBuilder (StringBuilderとか Lombok のBuilderアノテーションとか、ざっくり総称で Effective Java 版 Builder とでも呼ぶべきか)の使い方は、「まず builder のインスタンスを生成します」から始まるので RestTempalteBuilder もそれだと思っていた。
    • つまり、このクラスインスタンスは Spring Boot のデフォルト状態でインジェクション可能だけれども、このインジェクションされたRestTempalteBuilderインスタンスのスコープは(Spring のデフォルトであるところの)singleton-scope ではない と思っていた。
      • だってbuilderインスタンスが singleton-scope なら、あるbeanbuilderに設定したものが他所のbeanにも波及しちゃうじゃない。
  • けどResttemplateAutoConfigurationの Bean 定義部分どう見ても singleton-scope にしか見えない。何か自分の知らない記法(あるいは暗黙的解釈)がなにかまだあるのか? また 何か Spring マジックが発動しているのか…?

と思ってたけど、RestTemplateBuilderの状態設定メソッド(このへん)見て気づいた、 設定メソッドの中で new RestTemplateBuilder() やっとるんかーい!

Read more ⟶

https://hatena.ne.jp/ にアクセスできてるとお思いで?


はじめに: 試した環境

Windows10 の現時点での最新安定版 Google Chrome および Firefox を用いました。

  • Google Chrome 78.0.3904.108
  • Firefox 70.0.1

また実行に際しては、キャッシュ等の影響を避けるため、Chrome ではゲストモード、Firefox では今回新規作成したプロファイルで確認しました。

Read more ⟶

Spring Boot のプロパティではkebab-formatが推奨されている


Relaxed Binding 2.0 という仕組みにより

spring.jpa.database-platform=mysql
spring.jpa.databasePlatform=mysql
spring.JPA.database_platform=mysql

いずれの形式でも正しくバインドできる。
が、公式ドキュメントからは一番上の database-platform が推奨されているように読み取れる。


Relaxed binding - Spring Boot Configuration Binding:

Read more ⟶

native-imageコマンドを実行するために行ったWindows10 への GraalVM インストールがエキサイティングな件


悪い意味で。
なお試した時点での GraalVM 最新リリースバージョンは 19.2.1でした。

GraalVM インストール & 実行

GraalVM のインストール方法はいくつかあるのでお好みで。例えば:

(なお、SDKMAN!は今回試していないのでちゃんと動くかは知らない)

Read more ⟶

MockMvc でURLエンコード済みのpathを渡したいときは new URI(...) を引数にする


OAuth2.0 の redirect_uri をゴニョった実装をテストしたいときにハマった。

mockMvc.perform(get(new URI("/line/oauth/authorize?redirece_uri=https%3A%2F%2Fexample.com")

ってやらないと二重にエンコードされてしまう。

参考

Read more ⟶

Intel iGPU環境でのAmethyst 開発環境セットアップ


TL;DR

Ubuntu18.04, Coffee Lake iGPU で vulkan での実行を可能にするには

  • mesa-vulkan-drivers パッケージインストール

  • /etc/X11/xorg.conf.d/20-intel.conf で DRI3 有効化

の2点が必要。

(おそらく実際には、実行に libvulkan1 、及び開発には加えて libvulkan-dev も必要と思われるが、最初からインストールされていた)

Read more ⟶

Cargo.lock をバージョン管理するや否や


cargo new --bin したパッケージに対して、たまたまデフォルで生成される .gitignore を用いずに https://gitignore.io/ で生成してものを用いていたのですが、 Cargo.lock ファイルの扱いが異なるように思われ、あれ?と思って見直してみました。

Read more ⟶

電子キーボードを買いました


経緯

プログラミングとかビデオゲームとか、かなり目を酷使することばかりやっているので、そうではない趣味を持とうと考えた末、何か楽器を入門することにしました。

Read more ⟶

LINE Messaging API を試してみる


準備

Spring Boot セットアップ

https://start.spring.io/ でテンプレートを作成して次の依存関係を追加します。

<dependency>
    <groupId>com.linecorp.bot</groupId>
    <artifactId>line-bot-spring-boot</artifactId>
    <version>2.7.0</version>
</dependency>

Heroku セットアップ

今回は linebotbeta というアプリケーション名にしました。

Read more ⟶

LINE リッチメニューを試してみる


公式リファレンス に書いてある通りですが、リッチメニューを試してみました。 メニューをタップするとPostBackEventを送信します。

botでハンドリングするために、 前回 作成した bot に、PostBackEvent のハンドラを追加しています。

Read more ⟶

LINEログイン機能を試してみる(Spring Boot 2.1.7/Spring Security 5.1.6)


Important
本ページは Spring Boot 2.1.7 の頃のものですが、後続として 2.4.5 対応版があります: LINEログインを試してみる(Spring Boot 2.4.5/Spring Security 5.4.6) – 発火後忘失

Spring SecurityのOAuth実装は こちらに書いたとおり 歴史的経緯により複数存在しますが、 https://start.spring.io/ の Dependencies で "OAuth2 Client" を選択した場合に追加されるものは一番新しいSpring Securityの spring-security-oauth2-client (及び spring-security-oauth2-jose)でした。

Read more ⟶

Gradleプロジェクトで生成した実行スクリプトがGitBash(MSYS環境)でうまく動かない


GitBash環境でSDKMAN!を使ってJBakeをインストールしたのですが、 jbake コマンドを実行すると次のようなエラーが出てうまく動きませんでした。

Read more ⟶

Windows10上に開発環境を整える


前提

  • 主にJava開発を行う人(要は私自身)向け記述多し

  • パッケージ管理はscoopを使いますが、Java関係はなるべくSDKMAN!を使います

Read more ⟶