2012-01-03 58 views
1

堅持對象我需要實現以下結構:如何ThreadPoolTask​​Executor類

N個線程正在監視BlockedQueue<Message>(我甚至可以認爲我們可以在不久的將來使用ActiveMQ的)。

當捕獲到消息時,我對這條消息進行了一些修改,我需要將它保存在MongoDB數據庫中。

的服務是這樣的:

@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... 
} 

現在我需要線程之間共享Service對象。

如何使此服務線程安全?使用getInstance()方法工廠將服務對象設置爲單例(設計模式)並將其注入到可運行Bean中是否是一種良好的做法?

我的mongoDb模板應該打開N個連接(種類的連接池)嗎?

可能還有其他方法可以在線程之間共享這樣的服務嗎?

+0

首先,我個人認爲'Service'不是一個班的好名字。 你可以讓'save'方法'synchronized'嗎? – fiction 2012-01-03 23:43:46

回答

1

MongoDB驅動程序已經處理連接池,並且它也是線程安全的,並且在調用過程中不修改Message對象。因此,如果doSomething(message)是線程安全的,那麼您的服務代碼應該沒問題。

注意:mongoTemplate.save(message,「messages」)似乎有不正確的參數順序。您應該先傳遞集合名稱。

+0

我應該實現工廠方法getInstance()還是應該將其注入爲普通的Spring單例? – 2012-01-04 09:42:33

+0

注入它應該足夠好。 – Nat 2012-01-04 09:45:58

相關問題