バッチ処理

2022-04-26

4種類のバッチをSpring Batchで実装しました.
また, [CODE-290]「【バックエンド修正】依頼削除時に入札も削除する」も含まれています.

Job管理テーブルについて

README.mdに記載しましたが, Job管理テーブルを手動で作成する必要があるらしく, 初回のみ以下を実行する必要があります.

psql -f src/main/resources/batch-schema.sql postgresql://codedbuser:codedbpassword@127.0.0.1:5432/codedb

設定値について

  • cron等の設定は application.yaml に, 取引期限期間は定数値としてConstants.kt に記載しました。

application.yaml

spring:
  batch:
    initialize-schema: never
    job:
      # 起動時にjobを実行しないようにする
      enabled: false
 
# ...
 
batch:
  # 1回に取得するデータ数
  page-size: 100
  # 掲載期限通知
  notify-published-period:
    cron: "0 0 * * * *"
    # cronの実行間隔(sec)
    cron-interval-sec: 3600
    # 何秒前に通知するか
    notify-before-sec: 86400
  # 取引期限通知
  notify-deal-end:
    cron: "0 0 * * * *"
    # cronの実行間隔(sec)
    cron-interval-sec: 3600
    # 何秒前に通知するか
    notify-before-sec: 86400
  # 期限切れ取引完了
  auto-complete-deal:
    # 毎分
    cron: "0 * * * * *"
  # 掲載期限切れ処理
  republish-deal:
    # 毎分
    cron: "0 * * * * *"

Constants.kt

object Constants {
    /**
     * 取引開始から終了までの秒数
     * デフォルト: 7日間
     */
    const val dealExpiredSec = 7 * 86400L
}

大きなPRとなってしまい恐縮です.
お手数をお掛けしますが, お手すきの際にご確認の程お願いします.

ログ

2022-07-18

  • バッチ処理はLambdaでやるのやめてモノリシックにするらしい

    • 確かにCI/CD使えない以上デプロイを分割すればするほど運用が大変か
    • CircleCIとか外部のCI使えないのか
      • 月数十ドルなら人件費よりも圧倒的に安いのに渋る理由が見つからない
      • q 研でのAWSもそうだけど固定費はすぐ出すのに従量課金はなぜ出さないのか
      • 後者のほうが圧倒的に安いはずなのに
  • notice 休日の仕事の進め方

    • 質問の答えによって答えが分岐する所はそれを考慮した全パターンの実装をブランチ切って作る, 実装がめちゃくちゃ早ければ可能か
  • CODE-282 期限切れ取引自動終了バッチ

2022-07-25

  • claim 常々思うのは単体テストもっとわかりやすくかけるようにならないのかなって思う. モックとダミーデータの用意位自動でして欲しい

  • Ruby, testing toolとして

    • RSpec, factorybot, Faker
      • rspec, mockkみたいなこと出来る
  • なぜ, spring.datasource.hikari.auto-commit が false?

  • require(xxx.yyy != null) があるメソッドに verifty { ... } 呼ぶと例外吐く?

2022-07-28

  • RuntimeException, 非検査例外 -> ロールバック
  • それ以外 -> コミット

2022-07-29

  • Dealsの更新と通知の作成をトランザクションにするぞ

  • テストを書くぞ

  • PRを作るぞ

  • 林さん, 午前中caricariPJをやっていたのか

  • isEqualTo() 型無いの少しつらい

  • kotlin .also { it.forEach { .. } } => .onEach { .. }

  • testing 値ベースのテストどうしても偽陽性(false-positove)=網羅できないので本当はバグ(positive)なのに取り逃す(false)がおきてしまう

  • 厳密にするには?

    • SQLの結果をテストするのではなくクエリが正しいか, 適切なパラメータが渡されているかをテストすべき?
  • kotlin時刻変換

  • bug tenders に依存があるせいで deals 消せない

    • 起票した
  • 勤怠出す

  • bug 一度下書きに戻っても決済ID(chargeId) が設定されているので

    • 「この取引は既に決済されています」が出て再公開出来ない
  • nowItemReader がビルドされた時の値なので値が固定になってしまう

    • JobParameter を渡して, Step@Bean の中で毎回作り直されるようにしたい
      • @StepScope を使う
        • NoSuchContextException みたいなのが出る
        • ItemReader implement してその中で@Value(#{jobParameters}) でもらおう todo

2022-08-11

ここの売上更新処理は削除になりましたので、消してください。
(売上はレビュー評価時に登録するようになります)

コミットかdocs特定する

  • 休憩後, CODE-300 【バックエンド修正】通知取得APIの日時に時刻も含める

2022-12-27
4つのバッチのユニットテストを書く