2012-01-03 10 views
1

でオブジェクトを永続化するにはどうすれば以下のアーキテクチャを実装する必要があります。はThreadPoolTask​​Executor

メッセージがキャプチャされたときに、私はこのメッセージに対してほとんど変更を加えず、MongoDBデータベースに永続化する必要があります。

サービスは、このようなものです:今、私はスレッド間Serviceオブジェクトを共有する必要が

@Repository(value="service") 
public class Service { 

    @Autowired 
    MongoTemplate mongoTemplate; 

public void save(Message message){ 
    //do something to message 
    doSomething(message); 
    //persist it 
    mongoTemplate.save(message, "messages"); 
} 
//etc... 
} 

どうすればこのサービスをスレッドセーフにできますか? getInstance()メソッドファクトリを使用して、Service Objectをシングルトン(Design Pattern)としてRunnabble Beanに挿入するのがよい方法でしょうか?

mongoDbテンプレートにはN個の接続がオープンされている必要がありますか(接続プールの種類)?

スレッド間でこのようなサービスを共有するいくつかの方法がありますか?

+0

まず、私は個人的には、「サービス」はクラスの良い名前だとは思わない。 'save'メソッドを' synchronized'することはできますか? – fiction

答えて

1

コール中にMessageオブジェクトを変更しないと、MongoDBドライバは接続プールをすでに処理しています。スレッドセーフでもあります。したがって、doSomething(message)がスレッドセーフであれば、サービスコードは大丈夫です。

注:mongoTemplate.save(message、 "messages")の引数の順序が正しくないようです。最初にコレクション名を渡す必要があります。

+0

ファクトリメソッドgetInstance()を実装するか、通常のSpringシングルトンとして注入する必要がありますか? –

+0

これで十分です。 – Nat

関連する問題