HackToTech

Hack To Technology

SpringBootで@Repositoryがついたクラスのメソッドから投げられた例外を変換して投げ直す

個人的な備忘録 レイヤードアーキテクチャでアプリケーションを作っていて、 賛否両論あると思うがドメイン層のバリデーションを作成時とDBからの再構成時にチェックしていて、 作成時は例外をそのまま投げたいが、再構成時はそうしたくないと思っていたので…

/procに潜る

完全に個人的なメモなので、間違っている可能性あり 書いたっきりslack上で放置していたので、自分で後で見返せるように供養しておく まあそもそもman読めよって話ではあるのだけれど潜るだけ潜ってみる https://man7.org/linux/man-pages/man5/procfs.5.htm…

whiptailでlsしてファイル選択した結果を取得する

スクリプト書いてるとたまーに欲しくなるやつ 検索してもなんかぱっといい感じのやつが出てこないので(長すぎてコピペするのに躊躇うやつとか)、主に自分のローカルで使うように書いた ↓は /sbin で試したやつ macで使うなら brew install coreutils して、 …

LocalVariableTableParameterNameDiscovererが削除されてAutowireに失敗するようになった話

github.com SpringBootを3.2.0に上げた際に、 同じ型のBeanを定義していて、名前による(Qualifierではない)Autowireが失敗するようになってしまったので、それの備忘録 とりあえず複数のBeanがマッチするところまでの話は以下の記事に書いてるので端折る www…

SpringBootでAutowireする際に複数のBeanがマッチした際の挙動をみたのでメモ

雰囲気で挙動を理解していたのをちゃんと見たのでメモ spring.pleiades.io @Nullable public Object doResolveDependency(DependencyDescriptor descriptor, @Nullable String beanName, @Nullable Set<String> autowiredBeanNames, @Nullable TypeConverter typeCon</string>…

@Configurationで@Beanを宣言した際に誰がどう登録しているのかを見てたのでメモ

詳しく書いてあるところが見当たらなかったので単にコードを追った 完全に個人的なメモ tl;dr 最終的に DefaultSingletonBeanRegistry で持ってそう spring.pleiades.io バージョン Spring Boot 3.1.5 Spring Framework 6.0.13 コード data class Example(va…

PGAuditのログを減らしたくてバージョンごとの挙動の違いを見てたのでメモ

github.com PGAuditのissueとcommitを眺めていて、 個人的に悩みだった下記の問題が解決してそうだったのでバージョンごとの違いを確認する INSERT時の外部キーの監査ログがWRITEとして出てしまう問題 正直あまり意味のあるログではないので、出来る限り取り…

SpringBoot + KotlinでListの要素にConstraintsをかけたかった話

tl;dr コンパイラオプションに -Xemit-jvm-type-annotationsを指定する必要がある あとの文章は個人的なメモ リストの要素にConstraintsをかけたかったが、 なんか一見正しく見えるのに正しく動かなかった package com.example.exampleboot3 import org.hibe…

-Xmsと-Xmxを指定しても必ずしもすぐに物理メモリ上で確保されるわけではないという話

最初から確保されるものだと思い込んでいたら、 そういうわけではなかったので自分用に備忘録 理由はStackOverflowで解説されているので、それを読むのが良い stackoverflow.com どうやらAlwaysPreTouchを指定すると(その分起動は遅くなるが)、 JVMの初期化…

dependabotのgradleにKotlin DSLでpluginsとdependenciesで同じバージョンを指定してPRを作らせたい

残念ながら、gradleのバージョンが古くて(6.9系)version catalogが使えなかったので、その場合にしか役に立たない備忘録 おそらくgradleのバージョンが7.2以上なら多分version catalog使って、こんな面倒なことしなくても色々解決する気がしている developer…

APIの権限チェックに@PreAuthorizeを使うのをやめた話

tl;dr @PreAuthorize と @Valid を同時に使用した場合に、評価の順番に対して直感的にはわかりづらい問題がある Issueとしては↓があたるが、 要はコントローラーのリクエストハンドラーの変数の評価よりもあとに @PreAuthorize の評価がされる為、 本来であ…

ConstraintValidatorのisValidでエラーメッセージを変更する

isValid 内でValidationMessagseのキー指定して切り替えって出来るんだっけ?ってなったので、個人的なメモ書き ドキュメントを読んでいたら出来そうだったので試した あんまり使う機会はなさそうではある(基本的にはConstraintsは分けるし、相関チェックみ…

BeanValidationでControlCharacterが含まれる場合をバリデーションする

リクエストとかでControlCharacterが混じっていると邪魔になるので弾きたかったという話 調べてもすぐにぱぱぱっと出てこなかったりして面倒なのでメモがてら書く どちらも空文字は許可するようにしてある テストはソースに書いてあるので興味があれば impor…

SpringでRollbackされた時に別トランザクションでデータの保存をしようとしてたのでメモ

大まかなコードのイメージ package com.example.app.application import com.example.app.domain.Sample import com.example.app.domain.SampleRepository import org.springframework.aop.framework.AopContext import org.springframework.stereotype.Serv…

SpringBootでTomcatの特定のValveを削除する

タイトル通り あんまり使い道はないと思われるが、ちょっと簡単に削除が出来るのか気になったので個人的なメモ 消すのはRemoteIpValve 設定の話はこの辺 バージョン SpringBoot(2.7.5) # application.properties server.tomcat.remoteip.protocol-header=x-f…

CVE-2022-45143周りを見たのでメモ

https://lists.apache.org/thread/yqkd183xrw3wqvnpcg3osbcryq85fkzjjvn.jp 仕事していて話題にあがったので暇つぶしがてら見てみた とりあえず素のtomcatで試す conf/server.xmlを書き換える(関係ない箇所は省略) <Server port="8005" shutdown="SHUTDOWN"> <Service name="Catalina"> <Engine name="Catalina" defaultHost="localhost"> </engine></service></server>

Spring Bootのエラーページ周りを色々見たのでメモ

Spring bootを仕事で使っていて、 server.error.whitelabel.enabled を指定すると具体的にどうなるのかとか、 誰がどうレスポンスを生成しているのかとか、 この辺イマイチ浅い理解をしていてちゃんと説明出来そうにないのでちゃんとデバッガを動かしながら…

test-retry-gradle-pluginで特定のJunit5のNested ClassのRetryを実行させる

公式に書いてなくて探してすぐに見当たらなかったので備忘録 github.com Nested Classの指定は . ではなく $ でのアクセスになる # build.gradle.kts plugins { id("org.gradle.test-retry") version "1.4.1" } tasks.withType<Test> { useJUnitPlatform() retry {</test>…

英語環境のUbuntuで日本語のGoogle Chromeを使う

備忘録として書いておく 環境: Ubuntu 22.04.1 LTS Windowsではブラウザ側で指定できるくせにLinuxだとシステムのデフォルト言語しか使えないらしい Chrome の言語の変更とウェブページの翻訳 - パソコン - Google Chrome ヘルプ $ LANGUAGE=ja_JP google-ch…

KotlinのCompanion ObjectでGenericsを使った関数を定義したい

個人的な備忘録 IDのクラスに対してGenericsを使った共通の関数を持たせたいなーというのがあって、 reflection使えばとりあえず出来そうだったのでこれを仕事で使ってみている ただなんかcompanion object側のクラスに対してinterface継承させずにやる方法…

KotlinでmockStaticを使おうとしてちょっとハマった話

kotlin 書いてて、mockito-inline の mockStatic を使おうとして 少し時間無駄にしたので、他の人が同じことで時間を無駄にしないように書いとく tl;dr @JvmStatic のAnnotationをつける必要がある 普通に考えれば当たり前なんだけど、つけ忘れてた時にエラ…

Atlantisのカスタムワークフローで実行されるTerraformのバージョンが指定と異なる

issueにもなってた github.com なんか見栄えが悪いけど現状こうするしかないっぽい version: 3 projects: - name: test dir: projects/test terraform_version: 1.1.6 #明示的に指定したい workflows: default: plan: steps: - init # これはterraform_versi…

Terraform detected the following changes made outside of Terraformを無視することにした

実質メモ書き 尚、未だに公式的に回避する手立てがあるわけではないので、そこは実装されるのを待つしかない。 Terraform の 0.15.4 以降、これが出てくるようになった。 現状 ignore_changes するぐらいしかろくな回避手段がないが、ignore_changes は別に…

auroraでフェイルオーバーした際にコネクションの接続がぜんぜん切り替わらなくて色々見てたのでメモ

環境 Aurora postgresql Spring Boot driver は org.postgresql.driver Doma メモ AWSのベストプラクティスにも書かれているやつで、targetServerType を primary に指定しておけばFOした際に自動的にコネクションが再接続される jdbc:postgresql://myaurora…

AWS CloudWatch Logsの1レコードの最大長

aws

262118 bytes 年に1回ぐらい試すのにいつも忘れるのでメモ github.com github.com

semverが正しいかを確認する

仕事でタグの棚卸しをしていてこのsemver記法的に正しいんだっけみたいなのぱぱっと見る必要があったので備忘録がてら残しとく オンラインでぱぱっと見れたらいいんだけど、 なんか探し方が悪かったのかsemverとは何かみたいなサイトばっかりひっかかったの…

Pythonで辞書の配列から新たに辞書を作成する

pythonのreduceたまにどこにあるかよくわかんなくて迷う from functools import reduce ld = [{'Key': 'Key1', 'Value': 'Value1'}, {'Key': 'Key2', 'Value': 'Value2'}, {'Key': 'Key3', 'Value': 'Value3'}] reduce(lambda acc, x: dict(acc, **{x['Key']…

FargateでAWS CDKを実行して動的にクロスアカウントの別リージョンにデプロイしようとしたらハマった話

あんまりケースとしてはなさそうだけどCDKの実行基盤でFargateを採用してみた なんでそんなことしてたかの詳細は割愛するとして、 自分同様DockerImageにCDKの諸々を固めて cdk --profile なんたら --role-arn なんたら2 deploy みたいなことをFargateでやっ…

AWS CDKでdiffが出るのにdeployでnochangesになる

最近CDK使ってて出会した 端的に言えばCFnが悪いやつ(下はGithubのIssue) github.com ただまあ公式にも書いてあるこれをどうにかしてデプロイしたい CreationPolicy、DeletionPolicy または UpdatePolicy 属性単独では更新できません。 更新できるのは、リソ…

GC本を読んで学ぶ2

全てのガベージコレクションは以下のいずれかに基づいている(ガベージコレクタ毎にさまざまな方法で領域ごとにこれらのアプローチを組み合わせているらしい) マークスイープGC コピーGC マークコンパクトGC 参照カウントGC 大体wikiに載ってる ストップザ・…