Spring Bootで コンポーネント外からコンポーネントを取得したかった


動機

CDI で言うところの CDI.current().getBeans(...) とか CDI.current().select(...)とかそんな感じのことをやりたかった。

参考リファレンス

ドキュメントでは、やりたいことが書いてあるように見えたのはこのセクション

Read more ⟶

Spring Boot 2.1 でテスト時 @Bean を挿げ替えたかった


動機

ユニットテスト実行時に java.time.Clock を特定の時間に固定して再現性のあるテスト(現在の時刻に依存しないテスト)を作成したかった。

考え方/方針

@Configuration@Bean を定義して Clock をインジェクションできるようにし、実装ではそれを用いる。

Read more ⟶

text/plain で JSON を投げつけてくるヤツに対処する


の別解。

@Autowired
private RestTemplateBuilder builder;

...
    final MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
    converter.setSupportedMediaTypes(Arrays.asList(MediaType.TEXT_PLAIN));
    final RestTemplate restTemplate = builder.additionalMessageConverters(converter).build();

ちなみに上記のようにコンバータを明示的に設定しない場合だと次のような例外になる :

Read more ⟶

Java9以降.propertiesファイルをUTF-8で書けるようになった、は正しい?


解答

正しくない。

  • Java9(JEP226)で変わったのはリソースバンドルの取り扱い(PropertyResourceBundle) であって プロパティファイル .properties 全般の話ではない。
  • プロパティファイル.propertiesの文字エンコーディングについての取り決めはない。それを取り扱うプログラム次第でありUTF-8を正しく認識してくれるとは限らない。
    • 標準 API で UTF-8として(読もうと思えば)読めるようになったのは 1.6 からであって 9 からではない。ちなみに 1.5 以前は ISO 8859-1 前提。

背景

私はうろ覚えで何となく、現在の Java では .properties ファイルを UTF-8 で書ける、ascii2nativeは過去の遺物になった、のだと思いこんでいました。
ところが Spring Boot の application.propertiesUTF-8 で日本語を書いたところ文字化けしてしまい、あれ、もしかして自分の理解が間違っているのかと思い調べ直したのがこの記事です。

Read more ⟶

Testing the Web Layer のコードを JUnit Jupiter にマイグレーションしてみる


概要

(追記: ここで試したのは2.1.4.RELEASE時点のもの。2.2.0.M3以降では #14736の通り JUnit5 がデフォルトになっている模様。)

spring-boot-starter-test の JUnit5 対応はこちらの issue:

Read more ⟶

Spring Validator(でラップされたBean Validation)のメッセージをi18nしたときの覚え書き


やりたかったこと

  • BeanValidation のプロパティファイル ValidationMessages.properties でなく、 Spring のメッセージプロパティに統合したい。
    • Spring のメッセージプロパティとは?
  • Accept-Languageベースでメッセージを国際化したい。

調べた

Spring のメッセージプロパティファイルはどこ?

これはキーワード “site:spring.io i18n message” でググるとすぐ見つかった。

Read more ⟶

RPGツクールMVをバージョン管理するための初期設定


他の方が同じ話題で次のエントリを書かれていましたが、gulp 何それ状態なので理解できませんでした。理解できる方はそちらの方が良いのかもしれません。

Read more ⟶

Hibernate で CHAR を String にマップする


例えば、生 JDBC でchar型カラムのクエリを書くとString型にマップされます

    final Connection connection = DriverManager.getConnection(...);
    final Statement statement = connection.createStatement();
    final ResultSet resultSet = statement.executeQuery("select char_column from foo_table");

    // java.lang.String
    resultSet.getMetaData().getColumnClassName(1);

が、Hibernate の Native query を用いて同じように実行するとCharacter型にマップされます:

Read more ⟶

Eclipseの起動に使用するJDKを指定する(Mac)


最新の JDK をインストールしたが、古いバージョンの Eclipse も利用したい(が最新のバージョンでは起動できない)ような場合に必要となる設定です。

設定するファイルと設定方法

Eclipse.app/Contents/Eclipse にある eclipse.ini に、所望のバージョンの java コマンドが入っているディレクトリを指定します。
/usr/libexec/java_home -VJAVA_HOME 候補一覧が参照できますので、このディレクトリ + /bin を指定することになります。

Read more ⟶

Ubuntu18.04 端末の不快なエラー音 消す方法


Ubuntu を 18.04 にアップグレードしたら端末の補完処理で tab キーを押す度にヴヴッという不快なビープ音が鳴るようになってしまった。

端末のメニューから 設定 を選択し設定ダイアログを開く。
ダイアログで自分の使用しているプロファイル(ここではデフォルト)を選択し、文字タブのSoundオプションで端末ベルを鳴らすのチェックを外せば OK。

Read more ⟶

OpenJDK11をWindowsで自前ビルドする


Java の有償化ってより身近なところでは GPL 化と言った方が現状に即してるな、と思っています。

それはともかく、何となく OpenJDK をデバッグ情報付きでビルドしたくなったのでメモ。

Read more ⟶

Azure FunctionsでPowerShell使えなくなっとる


v1 で実験的サポートだった PowerShell が、実行環境のバージョンが上がったとかで v2 になり、選べなくなっているみたい?一時的な話?

実行環境を作る

https://portal.azure.com/ から 「リソースの作成」「Serverless Function App」と選択していきます。

Read more ⟶

Invoke-WebRequestやCompress-Archiveを使っていると画面上部に一瞬表示される何かの表示を非表示に


進捗状況(progress)が表示されているそうです。少量のデータを扱っている場合には画面の一部がフラッシュしているように見えており、何のための画面効果かさっぱりわかりませんでした(ので検索キーワードすら思い浮かびませんでした)。

Read more ⟶