2016-11-25 6 views
0

以下のようなコードスニペットがあります。これにより、いくつかのユーザーアクションが制限された回数だけ許可されます。春の競争条件コントローラ

1. @Value("${x.y.z.maxRetriesAllowed}") 
2. int maxAllowedRetries; 
3. int retryLimit = --maxAllowedRetries; 

そして、これは、静的コード分析(強化)になると、我々は避けることができる方法3.

誰かが提案してくださいラインで可能な競合状態があることが報告ツール、そのセッションオブジェクトの助けなし。

答えて

0

これはどうですか?

int retryLimit = this.getRetries(); 

private synchronized int getRetries() 
{ 
    return --this.maxAllowedRetires; 
} 
0

retryLimitの前にSpringによって初期化されるmaxAllowedRetriesには頼りになりますが、当然のことではありません。基本的には、おそらく0として出てきます。 Springが値を入力する前にフィールドが初期化されるため、オブジェクトの作成時にretryLimitが初期化されます。

+0

リクエストが来たら、コントローラメソッドのコードだけが実行されると思います。だから、春になると、maxAllowedRetriesをさらに利用できるようになります。 – kakurala

+0

これらはインスタンス変数です。したがって、オブジェクトの作成時にゼロに初期化され、春の後半にmaxAllowedRetriesが設定されます。とにかく、これについてのテストを書くと、何が起きているのかがわかります。 –

関連する問題