私の春のMVCアプリケーションでは、以下の問題があります。我々は春には新しく、春3.xを使用しています。以下の問題を説明しますが、明確でない場合はコメントしてください。 Spring MVCアプリケーションが同期していない
我々はサービスと リポジトリ豆の下に、以下のコードに示すSampleBeanにオブジェクトが後でトリガリクエストで上書き を取得していると同時に同時要求をトリガ
。コメントを次のように言い換える- は、スレッド1におけるSampleBeanにの値がスレッドで2
スケルトンコードをSampleBeanにする値で上書き
を得ています。
MyService.java
@Service public class MyService {
@Autowired private SampleBean sampleBean;
@Autowired private MyDao myDao;
public void updateDetailsToDB() throws Exception {
sampleBean.setXXX("xxx");
sampleBean.setYYY("yyy");
myDao.updateDetailsToDB(sampleBean);
}
}
MyDao.java
@Repository
public class MyDao {
@Autowired private SampleBean sampleBean;
@Autowired private MyDao myDao;
public void updateDetailsToDB(SampleBean sampleBean) throws Exception {
//Step 1: Print the data in sampleBean to console - *At this point the the sampleBean object prints the correct value specific to the thread.*
//Step 2: Insert data to table 1 into db using **jdbcTemplate**, the data will be taken from the bean
sampleBean getters.
//Step 3: Print the data in sampleBean to console.- *At this point the sampleBean value always print the values of the second request and it overwrites the value of the bean in first request as well which is not the case in Step 1.*
//Step 4: Insert data to table 2
}
}
更新: 私は、サービスクラスのメソッドすべてのものに同期を追加する場合要求としてうまくいく1つずつエストが処理されています。追加することなくこれを修正する方法を同期させました。
シングルトンに状態を保存しないでください。デザインに欠陥があります。あなたの 'SampleBean'はそこにあるべきではありません。これはメソッドの引数としてのみ存在し、 '@ ModelAttribute'で注釈が付けられることが望ましい。 –