春の統合を使用して、実行時間の長いアクションを切り離して、ユーザーへの応答を高速化しようとしています。
このリクエストにより、データベースに GPS 位置エントリが作成されます。逆ジオコーディング サービスによって、その GPS 位置のアドレスを取得する http 要求を実行したいと考えています。これには数秒かかることがあるので、後で/並行して実行したいと考えています。
Spring Integration はこれに最適ですが、私が抱えている問題は、並列実行中のサービスが高速化されている場合、ポジション エントリをデータベースに保存するときに競合が発生することです。
Spring Integration で永続オブジェクトを処理する方法に関するベスト プラクティスはありますか? メインのリクエストが処理されるまでオブジェクトをロックする必要がありますか?
アップデート:
基本的に、位置オブジェクト (疑似 Java コード) を操作する 2 つのメソッドがあります。
MVC コントローラーによって呼び出される Service クラスにあるもの:
void createPosition(float longitude, float latitude) {
Position position = new Position(longitude, latitude);
positionDao.save(position);
locationChannel.send(new GenericMessage<Position>(position));
}
それは、locationChannel にアタッチされた ServiceActivator によって呼び出される Service クラスにあります。
void getAddressForPosition(Position) {
position.setAddress(/* get address via http request from openstreet or google */);
positionDao.save(position);
}