すきま風

勉強したことのメモとか

JibでLayer architect な Spring Boot Applicationをdocker imageにする

Spring Boot ApplicationをDocker image化する手段として

等があります。(あります、とか大上段からものを言っていますが、ここ1週間くらいで仕入れた知識です。私はクソ雑魚です。)

Spring Boot 2.3.0からmvn spring-boot:build-imageでCloud Native Buildpackを使ったdocker imageが作成できるようになるらしく 今後のデファクトはCloud Native Build Packになりそうな予感があります。

とりあえず、一番簡単そうなJibを試しました。Build Packはその次に勉強する予定です。

今回から3回くらいにわたって、Jibでハマったところを記事に残していきます。


続きを読む

amazon-corretto-11をbrew cask upgrade したら trustAnchors parameter must be non-empty が出るようになった

$ brew cask reinstall corretto
$ echo $JAVA_HOME                                                                                火  1/21 11:36:24 2020
/Library/Java/JavaVirtualMachines/amazon-corretto-11.jdk/Contents/Home

$ java -version                                                                                  火  1/21 11:36:27 2020
openjdk version "11.0.6" 2020-01-14 LTS
OpenJDK Runtime Environment Corretto-11.0.6.10.1 (build 11.0.6+10-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.6.10.1 (build 11.0.6+10-LTS, mixed mode)

でgradle buildするとhttps接続するところで以下のようなメッセージが出てエラーとなりました。

trustAnchors parameter must be non-empty

amazonが配布しているtar.gzを落として確認したところ、cacertsのサイズが結構違っていたので置き換えてみました。

$ pwd
/Library/Java/JavaVirtualMachines/amazon-corretto-11.jdk/Contents/Home/lib/security

$ ls -l
-rw-r--r-- 1 root wheel 252168  1 21 11:17 cacerts     # tar.gzに入っていたもの
-rw-r--r-- 1 root wheel 160340  1 15 06:21 cacerts_bk  # brew でインストールしたもの

一応これで動くようになりました。おま環かもしれないし、動くようになったので深追いしない😑

コンテナに存在するかわからないBeanをAutowiredする

Constructor Injection

class Foo(
    private val bar: Bar?
) {
}

Field Injection

class Foo {
    @Autowired(required = false)
    lateinit var bar: Optional<Bar>
}

前回の記事に関連して小ネタ。@Autowired(required = false)を知らなかったのでメモ。 Constructor Injectionを使わない場合、@Autowired(required = false)として、Optionalで定義することができる。
KotlinでOptionalを使うのはもったいないので、できるだけConstructor Injectionを使う方が良さそうです。

参考

【Spring】複数のBeanをAutowiredする。(おまけ付き) - Qiita

Spring Boot × Gradleで自作ライブラリを作る

Spring Bootで自作ライブラリを1から作ったことがなかったので試してみました。

作成するライブラリ

文字列を引数で与えるとPrefixをつけて返してくれるMyTextDecoratorを作成します。
さらにadditionalを定義することで追加で文字列を付けてくれます。

github star 5,000超え待ったなしのスーパーライブラリですよこいつはぁ。

利用方法

# application.yml
mylibrary:
  text:
    prefix: my-prefix
    additional:
      enabled: true
      prefix: additional
@Service
class DemoService(
    private val myTextDecorator: MyTextDecorator
) : DemoUseCase {
    override suspend fun getSampleModel(): DemoUseCase.Output {
        val text = myTextDecorator.decorate("demo")
        println(text)  // -> my-prefixadditionaldemo
        return DemoUseCase.Output(text)
    }
}

やること

  • mylibrary.text.prefix を読み込んでBeanを生成する
  • mylibrary.text.additional.prefix を読み込んで条件に応じてBeanを生成する
  • MyTextDecorator.ktをBeanに登録する
  • spring.factoriesを用意する
  • jarに固める
  • 利用者側に取り込む


続きを読む

2019年振り返りと2020年

年始から風邪に倒れ、10日たった今も全く治る気配がありません。ずっと寝ていて暇なのでこのブログを書いています。今年はのっけから暗礁に乗り乗りで絶望しかない感じ。

2019年の概括

デレステが前よりうまくなった、くらいしか成長がないです。Lv27 Masterがフルコンできるようになってきました。やったぜ。 音ゲー初心者でも2年近く昼休みにプレイしているだけでここまで成長するんだから、継続は力なりです。 プレイ当初はLv17 Proすらクリアできなくて端末をベッドに投げ捨てていたものですが。

あとミリシタもはじめました。2ヶ月くらいプレイして、やっと全曲解放できました。琴葉好き。

仕事

2019年の春くらいから残業を一切しないという個人的な働き方改革をしています。それまでは50時間弱くらい残業していました。 おかげで心身に余裕ができて、一時期停滞していた登山にまたいけるようになりました。今年も継続したいです。収入減ったけど。


2019年12月に2年近く続けていたプロジェクトが無事リリースされ、と同時に自分の会社内での存在価値が一旦リセットされました。 今まで「技術力は無いしコミュ力も低いがムダに長い社歴から来る闇の業務知識で要所の開発にちょっとだけ必要だった長老的ポジション」として、なんとか職場に居場所を作っていましたが、今年は「技術はないしコミュ力もないロートル」スタートです。 厳しい戦いが予想されますが心を壊さない程度に働きたいです。なんと思われようが、お金が入ってくればそれで良いのだ。

趣味

数回はテントを担いた縦走をしたい。あとロードバイクを買ったので輪行もしたい。 いい加減体調不良以外の理由で有給休暇を取りたいです。

ブログ

なんか思ったより長く運営できたので今年も月2本くらいは技術的な何かを残していきたいです。元々今の仕事をやめたくて仕方のない時に「転職活動の際のポートフォリオとして使えるといいなあ」と思ってはじめましたが、上みたいなやる気のない文章を書き始めたのでもうそういったポジティブな活動には使えないです。もうどうにでもなーれって状態になったので、もっと自由に色々書けるといいなあと思います。

Configuration annotationのproxyBeanMethodsとBean Lite Modeについての備忘録

記事の概略

  • SpringのBeanにはBean Lite Modeというものがある
  • Spring 5.2から@Componentの代わりに@Configuration(proxyBeanMethods = false)を指定することでBean Lite Modeにできる
  • CGLIB Proxyが不要ならパフォーマンスがよくなる
  • https://github.com/spring-projects/spring-boot/issues/9068 を読めば大体わかる


以下は自分の勉強の備忘録になります。上のissueが完璧なのであんまり読む価値ない。


続きを読む

2019年12月の登山日記

倉戸山 - 鷹ノ巣山 - 奥多摩駅

12月中旬に行きました。雪のない石尾根をダラダラ奥多摩駅まで歩くのが好きです。

f:id:radiochemical:20200108182659p:plain
石尾根

峰谷 - 赤指尾根 - 高丸山 - 鷹ノ巣山 - 奥多摩湖

2週間後に似たようなコースを歩いたところちょっと雪が積もっていました。アイゼンを装着しないと不安だが、すぐに雪が途切れるからなるべく着けたくない、という感じで結局ノーアイゼンで歩きました。1月からは必須になりますね。

本当は浅間尾根を歩くつもりだったのですが、なんか間違えて赤指尾根を登っていました (^^;
しかも高丸山の巻道が台風の影響か何かで封鎖されていて、予定より1山多く登ることになったので結構疲れました。

f:id:radiochemical:20200108182714p:plain
鷹ノ巣山