エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

2024/04/29週 気づきと振り返りなどなど

業務こなしての気づき

特になし
あったのかもしれないが、メモってない。

その他雑記

個人開発

プロパティに動的変更の値はもたせるべきではない

機能制御フラグの値を持たせようと奮闘してた。。。
変更管理用の画面はすぐ出来たんだけど、肝心の値の更新が出来ず、四苦八苦してた。
よくよく考えたら、プロパティファイルって、不変な値をもたせるものだから、その値を更新しようとするのが間違えだったという結論にたどり着いた。

なので、DB管理するように変更して対応した。

学びとしては、プロパティファイルは不変値の保持、値を更新するならDBに持たせろってこと。

なぜClassNotFoundExceptionが発生するんだ?

上記の機能制御フラグをDBに持たせる対応をした際に、なぜか値取得でClassNotFoundExceptionが発生して、事件が迷宮入りしてた。

原因は単純で、SQLを作ったつもりだったが、作られていなかったのが原因。。。
ただ、似たような名前のSQLがあり、パット見、分からなかったんだよね。。。
半日悩んでた。
諦めて寝て、翌日起きたら簡単に解決してもうた。。。

解決したが、原因分かったときはマジで恥ずかった。。。
どらくらい恥ずかしいかと言うと、ドラゴンボールで完全体になる前のセルにイキってたベジータが、完全体になって手も足も出なくなったときくらいに恥ずかしかった。

Thymeleafを使ったhtmlからJavaクラスのメソッド呼び出し

抜粋すると下記。上がThymeleafを使ったHTMLで、下が呼び出してるJavaクラスの抜粋。

  <li class="nav-item mb-2" th:if="${@functionCtrlRepository.getFlg('circulation') eq '1'}">
    <a class="list-group-item" href="/circulation/">circulation</a>
  </li>
// import/packege省略

@Component
@Transactional
public class FunctionCtrlRepository {

// その他メソッド省略

    public FunctionCtrl get(String id) {
        Map<String, String> params = new HashMap<>();
        params.put("id", id);
        return sqlManager.getSingleResult(FunctionCtrl.class
                , new ClasspathSqlResource("sql/functionCtrl/select_one.sql")
                , params);
    }

    public String getFlg(String id) {
        return get(id).flg;
    }

// その他メソッド省略

}

やっていることは、SQLで値を取ってきて、それのフラグを見てタグの表示有無を判定している。 Thymeleaf側では、@クラス名.メソッド名(引数) でアクセスできる。
Controller側でやっても良かったんだが、サイドメニューのhtmlで、いろんなところのhtmlで参照しているから、全部のControllerに対応入れるのがダルかったので、Thymeleafから呼び出すように対応した。

基本的には、使いたくないんだけど、影響範囲を考慮して、こっちに変えた。
初めてやったから、いろいろな問題で躓いて辛かった。。。

参考情報

ThemeleafからJavaのメソッドを呼び出したい! | キャンパーSEの備忘録

私生活

GeminiAPI

とうとう有料化の流れになっちまった。。。。
なので、今まで無料で使っていたのは、廃止した。
簡単に言うと、APIキーを消しただけ。