だらだらと思いついたこととか書くブログ

エンジニア的なネタとか備忘録とかを書いていく予定

JJUG CCC 2017 Springに行ってきた

今更ながら参加してきたので当日のメモなどを 本当に適当なメモ書きレベルなので後で編集したい・・

レガシーアプリケーションの巻き取りとモジュール分割

ブランチ運用

テスト(CI/CD) 単体 → junit(validation etc) 画面単体 結合

@Runwith(Enclosed.class) → レビューアに優しいテストコード

selenide → 自動テストに利用

SpotBugs

tool

コーディング規約ならCheckStyle 問題検出は、PMD、SpotBugs、CheckerFw、 error-proneから選ぶ感じ

findbugs

onlyAnalizeで対象クラスを絞る visitorsで利用detectorをけずる(何を優先してチェックするのか) → これは使いやすいと思うとのこと

Spring cloud stream

Batchをスケールアウトしたことで、ポーリングによるRDBへの負荷が高まった → spring cloud streamを使った仕組みにつくりかえ => イベントドリブンに作り変え

SCS(spring cloud stream)

  • メッセージドリブンなマイクロサービスが実装しやすい(pub-subモデル)
  • spring bootアプリケーション
  • consumer groups → レポート作成のスケールアウトが容易になった => これによりノードごとに別IDの処理が行えるようになった(Batchをスケールアウトしたことで、ポーリングによるRDBへの負荷が高まった)
  • binder application → アプリ-ミドルウェア間が疎結合になるらしい(共通のdestination設定でOK)

spring batch job管理テーブルに大量INSERTでエラー(Sink側のSpring Batchが大量に起動した時に、Job管理テーブルに大量のinsertが流れてエラーに… )

  • maxAttemptの調整 → これだけだと不十分
  • DeadLetterQueue → エラーリカバリ用のMQを用意 => SCSのautoBindDlqをtrueに する

→ただ根本対応にはなっていないのでJobRepository側の対応方法を調査中。。

ポーリング型からイベントドリブンに変えたことでスループットが向上

CloudFoundryへ移行してスケールアウトが容易にできるようにする  → cflogin, cfpush? => この辺も含めて謎なので調べてみる

c.f) 第2世代への作り変えについて https://www.slideshare.net/techblogyahoo/jjugccc-cccf1-phpjava

c.f) pulsar https://www.infoq.com/jp/news/2016/10/pulsar

Jigsaw

・module-info.java - dependency disclosure scope → JAR内のこのファイルにモジュールの依存を記述する(module-info.javaでjarのメタ情報(依存性と公開範囲)を管理してModule化)

java –list-modules、現状73個のモジュールがリストされる