HerokuでSpringBootアプリを動かしてみる
背景
最終的にはLINE platformのAPIを理解したいのですが、 リファレンスを読んでいるとサンプルプログラム(サンプルbot)をHerokuにデプロイして試してみる、というような説明が多数あったので、Herokuについて理解しておこう、と考えました。
そういった考えで、今回、単純なSpringBoot hello-worldアプリをHerokuにデプロイして接続確認してみることにしました。
JBakeのタグページが想定通り動いていない
タグのindexページは正しくタグを収集しているようですが、それぞれのタグ個別ページがちゃんと生成されていないですね… テンプレートは 標準のものそのまま使っているはずなのだけれど。
bashで標準出力をファイルに、標準エラー出力を画面とファイルに出力したい
Git の pre-push でテスト実行を行おうとした際、通常テスト実行ではデバッグログを出しているところを、エラーを表すものだけに絞って出すようにしようと考えました。
Lombokプラグインを入れているEclipseでMapStruct自動生成が機能しない
上記のコードのようにLombokとMapStructを併用しているプロジェクトを、 Lombokプラグインを適用したEclipseで読み込ませるとMapStructのコードが自動生成されません。
そのため、Eclipse上でJUnitテストを実行すると次のように java.lang.ClassNotFoundException: Cannot find implementation
というエラーになります。
VSCodeでRustの整形ができない?
-
Format not work #534 - rust-lang/rls-vscode
VSCodeでRustの勉強をしているのですが、現在、どうもコード整形機能が上手く働いていない…?
代替策としては、 rustfmt
を使って、 cargo fmt
コマンドで整形すれば良さそう。
cargo build で特定のバージョンの rustc を利用する
rustup run 1.15.1 cargo build
もちろん事前に使用するバージョンをインストールしておく必要がある:
rustup install 1.15.1
参考:
JBakeはじめました
個人的にMarkDownはあまり好きではなく(標準だと表現力が弱いし方言が多い!)、ずっとblogをAsciiDocで書く方法を模索していました。
Spring Bootは、セキュリティフィルタBeanを作っている分だけ、無料で認証できちまうんだ
要約
78.10 Add a Servlet, Filter, or Listener to an Application曰く。
any
Servlet
orFilter
beans are registered with the servlet container automatically.
Spring Security 使った自前の認証フィルタを @Component
付けて作ったりなんかした際に意図しない URL path にも認証がかかってしまう。
んゴ。
h2-consoleとspring-boot-starter-securityと私
概要
spring-boot-starter-security
を導入しても http://localhost:8080/h2-console にアクセスしたかった。
作業結果: https://github.com/yukihane/hello-java/tree/master/spring/h2-console-spring-security-example
手順
h2-console が使える依存関係を追加してプロジェクトセットアップ 8113d7
|
|
h2-console を表示してみる 1b16dc
|
|
|
|
(注: spring.datasource.generate-unique-name
設定は Spring Boot 2.3.0 からデフォルト値が変わったため必要になったもので、リンク先 Git リポジトリには含まれていません(参考))
spring-boot-starter-security を入れたら認証画面が!
WebSecurityConfigurerAdapter#configure(HttpSecurity)
で form 認証を有効化しているのでこれをディスる。
WebSecurityConfigurerAdapter
を継承した Spring コンポーネントをスキャン対象に含めれば良い。
ちょっと待って!そのUserDetails、本当に必要ですか?
概要
Spring Boot の認証を実装してみた系のサンプルでよく UserDetails
や UserDetailsService
が用いられているが、必然性が不明なものがほとんどである。
(おそらく当の実装者も理解していない1。)
ファイル出力先にServletContext#getRealPathを使うな
タイトルに書いたような、ファイル出力先として ServletContext#getRealPath
を利用しているサンプルコードが見つかる、と聞いて検索してみたところ、日本語、非日本語にかかわらず確かにそのようなサンプルコードは散見されました。
例えば Qiita では(順不同):
元号が令和に変わったことを知らない人のための日付処理方法
問題
JapaneseDate.of
(や LocalDate.of
)を使うと厳密(strict)に検証されてしまう。
結果、例外が出る。
// 平成31年6月12日
final JapaneseDate today = JapaneseDate.of(JapaneseEra.HEISEI, 31, 6, 12);
System.out.println(today);
Exception in thread "main" java.time.DateTimeException: year, month, and day not valid for Era
at java.base/java.time.chrono.JapaneseDate.of(JapaneseDate.java:231)
at com.github.yukihane.datetime.App.main(App.java:21)
解決策
JapaneseChronology#resolveDate
(や IsoChronology#resolveDate
)を使えばゆるふわ(lenient)な検証でゆるしてくれたりも。